Как установить значение по умолчанию со значением метода доступа в Object.defineProperties?

Я хочу иметь возможность установить новое имя при создании нового объекта. Но каким-то образом я получил бесконечный цикл. Я не знаю, как это исправить.

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

1 ответ

Решение

В вашем коде нет бесконечного цикла, но было бы, если бы вы изменили это:

this.end = val;

к этому:

this.name = val;

(Вопрос теперь обновлен для использования this.name = val; )

Потому что это, конечно, называется set опять и опять...

То, что вам нужно, это что-то вроде вашего .end свойство для хранения фактического значения, а затем использовать get средство доступа для получения значения из .end,

  get: function() { return this.end },
Другие вопросы по тегам