Open Cosen95 opened 4 years ago
实现const的关键在于Object.defineProperty()这个API。
const
Object.defineProperty()
我们知道,Object.defineProperty() 接收三个参数:
Object.defineProperty(obj, prop, descriptor)
分别是:
obj
prop
descriptor
属性描述符有很多,这里针对const不可修改的特性,我们只需关注writable。
writable
writable: 当且仅当该属性的writable为true时,value才能被赋值运算符改变。默认为 false。
true
value
false
来看下最终代码实现:
function _const(key, value) { const desc = { value, writable: false } Object.defineProperty(window, key, desc) } _const('obj', {a: 1}) //定义obj obj.b = 2 //可以正常给obj的属性赋值 obj = {} //抛出错误,提示对象read-only
实现
const
的关键在于Object.defineProperty()
这个API。我们知道,
Object.defineProperty()
接收三个参数:分别是:
obj
:要在其上定义属性的对象prop
: 要定义或修改的属性的名称descriptor
: 将被定义或修改的属性描述符属性描述符有很多,这里针对
const
不可修改的特性,我们只需关注writable
。来看下最终代码实现: