Наследование в Javascript функции ошибки - PullRequest
0 голосов
/ 05 июня 2018

Я применяю наследование в JavaScript следующим образом:

var employee = function(name) {
  this.name = name;
}
employee.prototype.getName = function() {
  return this.name;
}
var pEmployee = function(salary) {
  this.salary = salary;
}
pEmployee.prototype.getSalary = function() {
  return this.salary;
}

var employee = new employee("mark");
pEmployee.prototype = employee;
var pe = new pEmployee(5000);
console.log(pe.getName());
console.log(pe.getSalary());

, но в консоли отображается следующая ошибка:

Uncaught TypeError: pe.getSalary не является функцией

Может ли кто-нибудь сказать мне, в чем причина этой ошибки?

1 Ответ

0 голосов
/ 05 июня 2018

Это потому, что вы добавили getSalary к объекту, к которому относится pEmployee.prototype, но затем полностью заменил pEmployee.prototype новым объектом.Естественно, новый объект не имеет getSalary.

То, что вы показали, не является правильным способом настройки наследования в ES5 и более ранних версиях.Вместо этого смотрите встроенные комментарии:

var Employee = function(name) {
  this.name = name;
};
Employee.prototype.getName = function() {
  return this.name;
};

var PEmployee = function(name, salary) {
  // Note call to superclass
  Employee.call(this, name);
  // Now this level's initialization
  this.salary = salary;
};

// This sets up inheritance between PEmployee.prototype and
// Employee prototype (then fixes up the
// constructor property)
PEmployee.prototype = Object.create(Employee.prototype);
PEmployee.prototype.constructor = PEmployee;

// NOW you add the method
PEmployee.prototype.getSalary = function() {
  return this.salary;
};

// Usage
var employee = new Employee();
var pe = new PEmployee("Mark", 5000);
console.log(pe.getName());
console.log(pe.getSalary());

См. мой ответ здесь для более подробного примера, а также, как это выглядело бы, если бы вместо этого вы использовали синтаксис class ES2015.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...