实现javascript继承

时间:2013-04-15 17:50:13

标签: javascript inheritance

我试图理解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.

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

1 个答案:

答案 0 :(得分: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的名称属性

你在没有任何参数的情况下调用构造函数。 idcompanyname属性将具有undefined值。此外,您的SubClass甚至没有name的参数,也没有向BaseClass构造函数调用传递任何内容。