我有我的主对象:
var Person = function() {
this.canTalk = true;
}
方法我希望所有子对象都继承:
Person.prototype.greet = function() {
if( this.canTalk ) {
console.log( 'Hi, I am ' + this.name );
}
}
继承自Employee
var Employee = function( name, title) {
Person.call( this );
this.name = name;
this.title = title;
}
实例化:
var robert = new Employee( "Robert Rocha", "Software Developer" );
robert.greet();
greet()
收到错误:Uncaught TypeError: robert.greet is not a function
我做错了什么?
答案 0 :(得分:4)
您需要扩展Employee
的原型。
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;
答案 1 :(得分:-2)
您需要做的关键是设置原型链。您正确调用了父构造函数并将其传递给它。你可以非常简单地做到这一点:
Employee.prototype = Person.prototype;
但是,现在当您向Person添加方法时,Employee也可以访问它。如果您有一个特殊用例,这将有效但通常您不希望这样做。
使用更常用的方法,当您向Employee.prototype添加方法时,Person将无法使用它。
Employee.prototype = Object.create(Person.prototype);
请注意,您仍在覆盖Employee.prototype并需要在此覆盖后定义方法。