Javascript 如何使用Object.defineProperties中的访问器值设置默认值?
我希望能够在实例化新对象时设置新名称。但不知何故,我得到了一个无限循环正在发生。我不知道如何修理它Javascript 如何使用Object.defineProperties中的访问器值设置默认值?,javascript,es5-shim,Javascript,Es5 Shim,我希望能够在实例化新对象时设置新名称。但不知何故,我得到了一个无限循环正在发生。我不知道如何修理它 function Human(opt) { this.name = opt.name; //this causes ranger error or infinite loop } Object.defineProperties(Human.prototype, { name : { set : function(val) { if(name === 'Einstein
function Human(opt) {
this.name = opt.name; //this causes ranger error or infinite loop
}
Object.defineProperties(Human.prototype, {
name : {
set : function(val) {
if(name === 'Einstein') {
console.log('Hello Einstein');
}
this.name = val;
},
configurable : false
}
});
您的代码中没有无限循环,但如果您更改此项,则会有无限循环:
this.end = val;
为此:
this.name = val;
(问题现在更新为使用this.name=val;
)
因为它当然会一次又一次地调用集合
您需要的是类似于.end
属性的内容来存储实际值,然后使用get
访问器从.end
检索值
get: function() { return this.end },
对不起,我打错了。应该是this.name我想在我使用
新人({name:'Einstein'})时设置this.name
。
@Woho87:我知道,但这就是导致循环的原因。如果您想使用设置
功能,您需要的是当设置了.name
时,setter实际上会将其设置为不同的属性。然后为.name
设置一个get
,这样当您请求.name
的值时,它将从另一个属性获取该值。