JS Object.freeze() 使用

81 min read

Object.freeze特性

Object.freeze()是ES5新增的特性,可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。防止对象被修改。 如果你有一个巨大的数组或Object,并且确信数据不会修改,使用Object.freeze()可以让性能大幅提升。

Object.freeze()接受一个对象作为参数,并返回一个相同的不可变的对象。这就意味着我们不能添加,删除或更改对象的任何属性

使用场景

对于纯展示的大数据,都可以使用Object.freeze提升性能

演示代码

const COMMANDS = Object.freeze({
  EDIT_COPY: 'edit.copy',
  EDIT_COPY_AS_HTML: 'edit.copy-as-html',
  EDIT_COPY_AS_MARKDOWN: 'edit.copy-as-markdown',
  EDIT_CREATE_PARAGRAPH: 'edit.create-paragraph',
  EDIT_CUT: 'edit.cut',
  EDIT_DELETE_PARAGRAPH: 'edit.delete-paragraph',
  EDIT_DUPLICATE: 'edit.duplicate',
  EDIT_FIND: 'edit.find',
  EDIT_FIND_IN_FOLDER: 'edit.find-in-folder',
  EDIT_FIND_NEXT: 'edit.find-next',
  EDIT_FIND_PREVIOUS: 'edit.find-previous',
  EDIT_PASTE: 'edit.paste',
  EDIT_PASTE_AS_PLAINTEXT: 'edit.paste-as-plaintext',
  EDIT_REDO: 'edit.redo',
  EDIT_REPLACE: 'edit.replace',
  EDIT_SCREENSHOT: 'edit.screenshot',
  EDIT_SELECT_ALL: 'edit.select-all',
  EDIT_UNDO: 'edit.undo',

  FILE_CHECK_UPDATE: 'file.check-update',
  FILE_CLOSE_TAB: 'file.close-tab',
  FILE_CLOSE_WINDOW: 'file.close-window',
  FILE_EXPORT_FILE: 'file.export-file',
  FILE_IMPORT_FILE: 'file.import-file',
  FILE_MOVE_FILE: 'file.move-file',
  FILE_NEW_FILE: 'file.new-window',
  FILE_NEW_TAB: 'file.new-tab',
  FILE_OPEN_FILE: 'file.open-file',
  FILE_OPEN_FOLDER: 'file.open-folder',
  FILE_PREFERENCES: 'file.preferences',
  FILE_PRINT: 'file.print',
  FILE_QUICK_OPEN: 'file.quick-open',
  FILE_QUIT: 'file.quit',
  FILE_RENAME_FILE: 'file.rename-file',
  FILE_SAVE: 'file.save',
  FILE_SAVE_AS: 'file.save-as',
  // FILE_TOGGLE_AUTO_SAVE: 'file.toggle-auto-save',

  FORMAT_CLEAR_FORMAT: 'format.clear-format',
  FORMAT_EMPHASIS: 'format.emphasis',
  FORMAT_HIGHLIGHT: 'format.highlight',
  FORMAT_HYPERLINK: 'format.hyperlink',
  FORMAT_IMAGE: 'format.image',
  FORMAT_INLINE_CODE: 'format.inline-code',
  FORMAT_INLINE_MATH: 'format.inline-math',
  FORMAT_STRIKE: 'format.strike',
  FORMAT_STRONG: 'format.strong',
  FORMAT_SUBSCRIPT: 'format.subscript',
  FORMAT_SUPERSCRIPT: 'format.superscript',
  FORMAT_UNDERLINE: 'format.underline',

  MT_HIDE: 'mt.hide',
  MT_HIDE_OTHERS: 'mt.hide-others',

  PARAGRAPH_BULLET_LIST: 'paragraph.bullet-list',
  PARAGRAPH_CODE_FENCE: 'paragraph.code-fence',
  PARAGRAPH_DEGRADE_HEADING: 'paragraph.degrade-heading',
  PARAGRAPH_FRONT_MATTER: 'paragraph.front-matter',
  PARAGRAPH_HEADING_1: 'paragraph.heading-1',
  PARAGRAPH_HEADING_2: 'paragraph.heading-2',
  PARAGRAPH_HEADING_3: 'paragraph.heading-3',
  PARAGRAPH_HEADING_4: 'paragraph.heading-4',
  PARAGRAPH_HEADING_5: 'paragraph.heading-5',
  PARAGRAPH_HEADING_6: 'paragraph.heading-6',
  PARAGRAPH_HORIZONTAL_LINE: 'paragraph.horizontal-line',
  PARAGRAPH_HTML_BLOCK: 'paragraph.html-block',
  PARAGRAPH_LOOSE_LIST_ITEM: 'paragraph.loose-list-item',
  PARAGRAPH_MATH_FORMULA: 'paragraph.math-formula',
  PARAGRAPH_ORDERED_LIST: 'paragraph.order-list',
  PARAGRAPH_PARAGRAPH: 'paragraph.paragraph',
  PARAGRAPH_QUOTE_BLOCK: 'paragraph.quote-block',
  PARAGRAPH_TABLE: 'paragraph.table',
  PARAGRAPH_TASK_LIST: 'paragraph.task-list',
  PARAGRAPH_INCREASE_HEADING: 'paragraph.upgrade-heading',

  TABS_CYCLE_BACKWARD: 'tabs.cycle-backward',
  TABS_CYCLE_FORWARD: 'tabs.cycle-forward',
  TABS_SWITCH_TO_EIGHTH: 'tabs.switch-to-eighth',
  TABS_SWITCH_TO_FIFTH: 'tabs.switch-to-fifth',
  TABS_SWITCH_TO_FIRST: 'tabs.switch-to-first',
  TABS_SWITCH_TO_FOURTH: 'tabs.switch-to-fourth',
  TABS_SWITCH_TO_LEFT: 'tabs.switch-to-left',
  TABS_SWITCH_TO_NINTH: 'tabs.switch-to-ninth',
  TABS_SWITCH_TO_RIGHT: 'tabs.switch-to-right',
  TABS_SWITCH_TO_SECOND: 'tabs.switch-to-second',
  TABS_SWITCH_TO_SEVENTH: 'tabs.switch-to-seventh',
  TABS_SWITCH_TO_SIXTH: 'tabs.switch-to-sixth',
  TABS_SWITCH_TO_TENTH: 'tabs.switch-to-tenth',
  TABS_SWITCH_TO_THIRD: 'tabs.switch-to-third',

  VIEW_COMMAND_PALETTE: 'view.command-palette',
  VIEW_DEV_RELOAD: 'view.dev-reload',
  VIEW_FOCUS_MODE: 'view.focus-mode',
  VIEW_FORCE_RELOAD_IMAGES: 'view.reload-images',
  VIEW_SOURCE_CODE_MODE: 'view.source-code-mode',
  VIEW_TOGGLE_DEV_TOOLS: 'view.toggle-dev-tools',
  VIEW_TOGGLE_SIDEBAR: 'view.toggle-sidebar',
  VIEW_TOGGLE_TABBAR: 'view.toggle-tabbar',
  VIEW_TOGGLE_TOC: 'view.toggle-toc',
  VIEW_TYPEWRITER_MODE: 'view.typewriter-mode',

  WINDOW_MINIMIZE: 'window.minimize',
  WINDOW_TOGGLE_ALWAYS_ON_TOP: 'window.toggle-always-on-top',
  WINDOW_TOGGLE_FULL_SCREEN: 'window.toggle-full-screen',
  WINDOW_ZOOM_IN: 'window.zoom-in',
  WINDOW_ZOOM_OUT: 'window.zoom-out'
})

export default COMMANDS