我搞砸了一些“经典”继承,并且遇到了一个问题。我正在使用Object.defineProperty()
向我的LivingThing
“类”添加属性。我想要一个默认值,以及一个属性 getter / setter 。
http://jsfiddle.net/fmpeyton/329ntgcL/
我遇到以下错误:
Uncaught TypeError: Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>
为什么会出现此错误?使用
Object.defineProperty()
为属性设置默认值和getter / setter的最佳方法是什么? 最佳答案
使用函数范围的变量来支持定义的属性,并将该变量的初始值设置为默认值:
function LivingThing(){
self = this;
var isAlive = true;
Object.defineProperty(self, 'isAlive', {
get: function(){
return isAlive;
},
set: function(newValue){
isAlive = newValue;
},
configurable: true
});
self.kill = function(){
self.isAlive = false;
};
}
http://jsfiddle.net/329ntgcL/5/
不需要
writable
,因为您有二传手。这就是导致您出错的原因。您可以具有值/可写(数据描述符)或获取/设置(访问器描述符)。结果,当您调用
var l = new LivingThing
,l.isAlive == true
以及在您调用l.kill()
,l.isAlive == false
之后