您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么是Object.defineProperty()而不是this.defineProperty()(对于对象)?

为什么是Object.defineProperty()而不是this.defineProperty()(对于对象)?

这是为了避免发生冲突-通常情况下,对象的问题不具有所需值的属性。 JS中的对象通常用作键-值映射,键可以是任意字符串-例如__defineGetter__hasOwnProperty或不太特殊的东西。现在,当您想在未知对象上调用此类函数时(就像hasOwnProperty泛型枚举函数中经常使用的那样,可能会传入任何JSON),您永远无法确定自己是否获得了被覆盖的属性(甚至可能不是函数))或所需的原始对象,或者该对象是否完全继承了该属性。为了避免这个问题,您必须使用Object.prototype.hasOwnProperty.call-很难看。

因此,命名所有这些功能Object仅是有用的,它是一种更清洁的API,用于将反射方法与对象的应用程序界面分开。这还有助于优化(简化静态分析),并使限制沙箱中对反射API的访问更加容易- 至少这是设计思想

您可能会很乐意defineProperty在原型中添加一个环,但是只有在使用已知对象时才能安全地使用它。如果您仍然想要它(如您所知何时使用和何时不使用),则可以使用

Object.defineProperty(Object.prototype, "defineProperty", {
    writable: true,
    enumberable: false,
    value: function(prop, descr) {
        return Object.defineProperty(this, prop, descr); 
    }
});
其他 2022/1/1 18:14:54 有615人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶