对象只读属性

Ste*_*her 3 javascript object

我正在阅读关于只读属性的这个问题,我发现了这个片段:

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中的某些东西如何推断私有属性.

Ben*_*aum 6

为什么允许转让,如果允许,怎么可能没有发生?在这个片段中没有推断范围,所以我不明白JS中的某些东西如何推断私有属性.

因为赋值(在严格模式之前)从不抛出并使其抛出会违反人们期望的那种不变量.虽然你仍然可以覆盖它(通过使一个setter,使掷)这是性质JavaScript中的默认行为.我们不喜欢它,但它就是它.

如果你使用严格模式 - 你应该得到:

TypeError:设置只有getter的属性