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
的值时,它将从另一个属性获取该值。