0

我希望能够在实例化新对象时设置新名称。但不知何故,我发生了一个无限循环。我不知道如何解决它。

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
  }
});
4

1 回答 1

2

您的代码中没有无限循环,但如果您更改此代码,则会出现:

this.end = val;

对此:

this.name = val;

(问题现在更新使用this.name = val;

因为它当然会set一遍又一遍地调用...

您需要的是类似于您的.end属性来存储实际值,然后使用get访问器从.end.

  get: function() { return this.end },
于 2013-05-06T14:45:33.553 回答