Это потому, что вы добавили 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.