JavaScript 继承

//父类
function ClassA(sColor) {
  //Define Properties
  this.color = sColor;
  this.drivers = new Array("Mike","John");
  
  this.showColor = function() {
      prt(this.color);
  };
}

//父类
function ClassB(sName) {
    this.name = sName;

    this.sayName = function () {
        prt(this.name);
    };
}

//子类,多重继承父类 ClassA, ClassB
function ClassC(sColor, sName, sType) {
    ClassA.call(this, sColor);
    ClassB.call(this, sName);

    this.type = sType;

    this.sayType = function () {
        prt(this.type);
    };
}

obj = new ClassC("BLUE", "Saab", "Advanced");

obj.showColor();
obj.sayName();
obj.sayType();

Question:构造函数会为每个对象都创建独立的函数版本。事实上,每个对象应该共享同一个函数。

改进版:原型链方法
function ClassA(sColor) {
    this.color = sColor;

    if (ClassA._initialized) return;    
    ClassA._initialized = true;   

    ClassA.prototype.sayColor = function() {
        prt(this.color);
    };
}

function ClassB(sColor, sName) {
    ClassA.call(this, sColor);
    this.name = sName;

    if (ClassB._initialized) return;    
    ClassB._initialized = true;   

    prt("Init");
    ClassB.prototype.sayName = function() {
        prt(this.name);
    };
}
ClassB.prototype = new ClassA();

var b = new ClassB("RED", "BMW");
b.sayColor(); //inherit from parent method
b.sayName();

你可能感兴趣的:(JavaScript)