js继承-寄生组合继承

首先实现一个寄生组合继承的最简单函数,这个函数接收两个参数:子类型构造函数和超类型构造函数。

function object(o) {
    //首先创建一个临时性的构造函数
    function F() {}
    //然后将传入的对象作为这个构造函数的原型
    F.prototype = o;
    //最后返回这个临时类型的新实例
    return new F();
}

在传入一个参数的情况下,Object.create()与上方object方法的行为是相同的

function inheritProtoType(subType,superType) {
    //创建超类型原型的一个副本
    let prototype = Object.create(superType.prototype);
    //为创建的副本添加constructor属性,用来弥补因重写原型而失去默认的constructor属性
    prototype.constructor = subType;
    //将新创建的副本赋值给子类型的原型
    subType.prototype = prototype;
}

定义子类型和超类型构造函数,并实现继承。

function SuperType(name) {
    this.name = name;
    this.colors = ["red","blue","yellow"];
}
SuperType.prototype.sayName = function () {
    console.log(this.name)
};
function SubType(name,age) {
    SuperType.call(this,name);
    this.age = age;
}
inheritProtoType(SubType,SuperType);
SubType.prototype.sayAge = function () {
    console.log(this.age);
};

上述SuperType.call(this,name);的意思是使用SuperType对象代替this,并且传了一个name值。

简单测试一下。

let person1 = new SubType("Jack",18);
person1.colors.push("black");
let person2 = new SubType("Tom",19);
console.log(person1);
console.log(person2);

控制台打印结果:

猜你喜欢

转载自blog.csdn.net/mofigg/article/details/80704867