美文网首页
深入理解JavaScript对象的自有属性以及属性描述符

深入理解JavaScript对象的自有属性以及属性描述符

作者: ?尛孞 | 来源:发表于2019-04-06 11:13 被阅读0次

    在JavaScript中,按照对象属性的访问特性,Object对象中存在两种类型的属性:
    1.共有属性,对象实例共有的属性,所有对象实例都可用,可以从原型链上查找的属性,可被for in或者Object.keys枚举到
    2.自有属性,对象实例私有的属性,只有该对象实例可用,不可从原型链上查找的属性,不可被for in或者Object.keys枚举到

    可以看到,其实,Object本身也是一个对象,那么它是谁的实例呢?是的,没错,它就是Function的一个实例。
    所以其实可以看到下面两段这样的代码的执行结果:
    Object instanceof Function //true
    Function instanceof Object //true
    作为一个对象,那么当然它可以作为下面API的一个参数,当然Object下有prototype属性,于是:
    Object.getOwnPropertyDescriptor(Object,"prototype"),结果是什么呢?
    屏蔽proto以及value,可以看到
    configurable: false
    enumerable: false
    writable: false
    这样的执行结果,那么这说明了该属性不可被删除,不可被枚举,不可被修改。
    这也就是说当我们试图赋值给Object.prototype时,该操作是无效的,因为它不可被修改。

    现在来谈谈JavaScript对象的数据属性和访问器属性
    proto就是一个访问器属性,获取该属性的值时通过调用getter去获取,修改该属性的值时通过调用setter来修改,换句话来说,我们是无法直接操作proto的,操作时内部实际都是通过这样的方式在内部操作的,只是对外屏蔽了内部操作实现,只对外提供了操作的方式,仅此而已。
    而且通过Object.getOwnPropertyDescriptor(Object,"proto")查看属性描述符没有任何结果返回

    相关文章

      网友评论

          本文标题:深入理解JavaScript对象的自有属性以及属性描述符

          本文链接:https://www.haomeiwen.com/subject/sdvkiqtx.html