0

我试图理解javascript中的继承

function baseClass(name) {
   this.name = name;
   this.getName = function() {
       return this.name;
   }
}



function subClass(id, company){
       baseClass.call(this);
       this.id = id;
       this.company = company;
       this.toString = function() {
           return name + "\n" + this.id + "\n" + this.company; 
       }  
   }



subClass.prototype = Object.create(baseClass);
   var s = new subClass();
   s.toString();  //here the name property from the baseClass is not displayed.

如何正确实现继承(经典/原型)

4

1 回答 1

3

首先,有两个小问题:

如何正确实现继承

移动原型对象上的方法(不需要特权,在构造函数范围内没有局部变量)。并让SubClass.prototype继承自BaseClass.prototype,而不是从BaseClass函数中继承。

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

function SubClass(id, company){
    BaseClass.call(this);
    this.id = id;
    this.company = company;
}
SubClass.prototype = Object.create(BaseClass.prototype);
SubClass.prototype.toString = function() {
   return this.name + "\n" + this.id + "\n" + this.company; 
};

new SubClass().toString()不显示来自 baseClass 的 name 属性

您正在调用没有任何参数的构造函数。,idcompany属性name将具有undefined值。此外,您SubClass甚至没有 的参数name,并且它没有将任何内容传递给BaseClass构造函数调用。

于 2013-04-15T17:58:42.467 回答