【发布时间】:2015-09-03 06:13:33
【问题描述】:
我正在阅读this 关于只读属性的问题,我遇到了这个 sn-p:
var myObject = {
get readOnlyProperty() { return 42; }
};
alert(myObject.readOnlyProperty); // 42
myObject.readOnlyProperty = 5; // Assignment is allowed, but doesn't do anything
alert(myObject.readOnlyProperty); // 42
现在,我知道要隐藏范围,您可以使用 IIFE,也可以将变量或属性设为“私有”,但我不明白的是:
为什么允许分配,如果允许,怎么可能什么都不会发生?在这个 sn-p 中没有推断范围,所以我不明白 JS 中的某些东西如何推断私有属性。
【问题讨论】:
-
它不是“私有”,它使用“get”关键字运行一个函数,该函数在您引用属性时返回值。
-
添加一个
set readOnlyProperty()函数,该函数会引发错误以阻止赋值。 -
用户不能只定义一个setter方法并覆盖这个只读方面吗?
-
@SterlingArcher 如果你
Object.freeze则不会。如果你用.definePropety做它也是安全的(见可配置和可写) -
@SterlingArcher 您只能在字面量对象定义中使用
set/get,因此您不能创建一个setter(使用这个set/get字面量语法)新对象。不过,您可以使用Object.defineProperty重新定义属性(除非属性具有configurable: false,或者对象被冻结)。
标签: javascript object