1

есть рабочий код:

var Person = {
    constructor: function(name,age){
    this.name=name;
    this.age=age;
  }
};

var One = Object.create(Person);

One.constructor("Alex", 32)

console.log(One.name); console.log(One.age);

вроде бы всё понятно, создаётся объект Person, который в последующем станет прототипом для One, для этого вызываем Object.create(Person), потом используем его методOne.constructor("Alex", 32), и вуаля, всё прекрасно работает! Но увидил другую реализацию данного кода, и завис:

var Person = {
    constructor: function(name,age){
    this.name=name;
    this.age=age;
    return this
  }
};

var One = Object.create(Person).constructor("Alex", 32);

console.log(One.name); console.log(One.age);

С одной стороны я понял, что Object.create(Person) возвращает ссылку на объект Person, ну и можно сразу вызвать его метод constructor с нужными нам аргументами, для создания объекта One . . . Но, код работает лишь в том случае, когда в теле функции constructor: function(name,age){...} прописано return this! Объясните мне пожалуйста, в чём суть? Какой объект мы возвращаем, и почему без него не работает? Спасибо!

Muranx
  • 193
  • чет вспомнилось) https://ru.stackoverflow.com/questions/593694/%D0%A7%D1%82%D0%BE-%D1%81%D0%BE%D0%B1%D0%BE%D0%B9-%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%82-this-%D0%B8-super/593701#593701 – tCode Apr 15 '19 at 08:36
  • Суть в том, что во втором случае вы пихаете в переменную One то, что возвращает функция constructor. А в первом случае вы не пихаете, поэтому там return this не обязателен – andreymal Apr 15 '19 at 08:40
  • Ничего всё равно не понял – Muranx Apr 16 '19 at 03:01
  • @andreymal, лучшее объяснение, из тех, что может быть на stackoverflow (нет) – Muranx May 04 '19 at 07:34

0 Answers0