ключевое слово this в цепочке наследования Javascript - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть функция с именем Car в качестве супертипа

let Car = function(){};
Car.prototype = {
    constructor: Car,
    numWheel: 4,
    numLight : 2,
    describe = function () {
        console.log(`This car is ${this.name} produced in ${this.version} `);
    }
}

Я хочу, чтобы конструктор подтипа наследовал от него, и сделать экземпляр из этого конструктора

let Honda = function (name, version) {
    this.name = name;
    this.version = version;
}
Honda.prototype = Object.create(Car.prototype);
Honda.prototype = {
    constructor: Honda
}
let civic = new Honda('civic', 2015);

Вопрос, который я хочу задать, - это где 'this' в супертипе указывает на объект подтипа здесь. Когда я пытаюсь вызвать функцию

civic.describe;

Появляется ошибка.

Uncaught SyntaxError: Неверный сокращенный инициализатор свойства

Почему ключевое слово "this" не может быть унаследовано?

1 Ответ

0 голосов
/ 05 ноября 2018

Есть несколько проблем с вашим кодом:

  1. Способ присвоения функции свойству объекта (describe = function() { /* ... */}) синтаксически недопустим.
  2. Вы переназначаетесь на прототип Honda, перезаписывая ранее назначенное с помощью Object.create().

Этот фрагмент решает обе проблемы путем правильной инициализации объекта и использования Object.assign:

let Car = function() {};
Car.prototype = {
  constructor: Car,
  numWheel: 4,
  numLight: 2,
  describe: function() {
    console.log(`This car is ${this.name} produced in ${this.version} `);
  }
}


let Honda = function(name, version) {
  this.name = name;
  this.version = version;
}
Honda.prototype = Object.assign({}, Car.prototype, {
  constructor: Honda
});

let civic = new Honda('civic', 2015);
civic.describe();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...