js面向对象之组合继承

首先先上一段代码

function SuperType(name) {
    //父函数的自定义属性
    this.name = name;
    this.colors = ["red","orange","black"];
};

SuperType.prototype.sayName = function() {
     //父函数原型中定义的方法
    console.log(this.name);
};

//定义子函数
function SubType (name,age) {
    //子函数继承父函数的属性
    //借用构造函数实现对实例属性的继承
    SuperType.call(this,name);    
    //子函数定义自己的属性
    this.age = age;
}

//子函数继承父函数的方法
//通过原型链对原型属性和方法的继承
SubType.prototype = Object.create(SuperType.prototype);
    //下面注释的这种写法子类会具有父类实例的方法,不推荐
    //SubType.prototype = new SuperType();
SubType.prototype.constructor =SubType;

//自定义子函数的方法
SubType.prototype.sayAge = function() {
    console.log(this.age);
}

//测试
var instance1 = new SubType("LLL","24");
instance1.colors.push("pink");
console.log(instance1.colors);//"red,orange,black,pink"
instance1.sayName;//"LLL"
instance1.sayAge;//"24"

//测试2
var instance2 = new SubType("XXX","25");
console.log(instance2.colors);//"red,orange,black"
instance2.sayName;//"XXX"
instance2.sayAge;//"25"

你可能感兴趣的:(js面向对象之组合继承)