我正在阅读关于只读属性的这个问题,我发现了这个片段:
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
Run Code Online (Sandbox Code Playgroud)
现在,我知道隐藏范围,你可以使用IIFE,也可以使变量或属性"私有",但我不明白的是:
为什么允许转让,如果允许,怎么可能没有发生?在这个片段中没有推断范围,所以我不明白JS中的某些东西如何推断私有属性.
为什么允许转让,如果允许,怎么可能没有发生?在这个片段中没有推断范围,所以我不明白JS中的某些东西如何推断私有属性.
因为赋值(在严格模式之前)从不抛出并使其抛出会违反人们期望的那种不变量.虽然你仍然可以覆盖它(通过使一个setter,使该掷)这是性质JavaScript中的默认行为.我们不喜欢它,但它就是它.
如果你使用严格模式 - 你应该得到:
TypeError:设置只有getter的属性