Cosen95 / fe_interview

字节、阿里、美团、滴滴、腾讯等大厂高级前端面试题整理
238 stars 25 forks source link

如何在ES5环境下实现const #85

Open Cosen95 opened 4 years ago

Cosen95 commented 4 years ago

实现const的关键在于Object.defineProperty()这个API。

我们知道,Object.defineProperty() 接收三个参数:

Object.defineProperty(obj, prop, descriptor)

分别是:

属性描述符有很多,这里针对const不可修改的特性,我们只需关注writable

writable: 当且仅当该属性的writabletrue时,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