JavaScript继承无法按预期工作

时间:2015-06-17 23:17:07

标签: javascript inheritance

我有我的主对象:

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

我做错了什么?

2 个答案:

答案 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并需要在此覆盖后定义方法。