【发布时间】:2015-11-11 20:39:47
【问题描述】:
我一直在阅读有关属性属性(可配置、可写、可枚举)的内容,并且正在寻找有关 setter 如何与不可写/不可配置属性交互的一些说明。
具体来说,如果使用Object.defineProperty() 定义属性,它将默认为configurable: false 和writable: false。在这种情况下,同一个对象中的 setter 函数是否仍然能够修改属性的值?
这是我正在查看的示例:
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function(){
return this._year;
},
set: function(newValue){
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
-- 来自“面向 Web 开发人员的专业 JavaScript,第 3 版”。 (尼古拉斯·C·扎卡斯)
因此,book.year 的 setter 部分旨在更新 book._year 的值。
但是由于book._year 是使用Object.defineProperty 定义的,并且没有明确设置为可写或可配置,所以不应该是不可修改的吗?或者同一对象中的函数(即book.year)是否以某种方式排除在这些限制之外?
还值得注意的是,当我在浏览器中运行这段代码时,它给了我一些有趣的结果......即:
book.year = 2005 对 book.year 或 book._year 没有任何作用,并且
book.year(2005) 导致 TypeError: book.year is not a function。
【问题讨论】:
标签: javascript oop getter-setter