原型链和继承 学习代码

89 阅读1分钟
function Super(){
    this.colors=["1","2","3"];
}

Super.prototype.sayName = function (){
    console.log(this.colors);
};

function Sub(){
    Super.call(this);    //构造函数继承 问题:查找不到原型链上的属性   (第二次调用父类构造函数)
}

//Sub.prototype = new Super();    //原型继承 问题:引用类型值(比如数组)所有实例共享   (第一次调用父类构造函数)

/*采用中间值
function temp(){}
temp.prototype=Super.prototype;
Sub.prototype=new temp();
*/

//或者(代码中尽量不要出现__proto__)
//Sub.prototype.__proto__=Super.prototype;

Object.setPrototypeOf(Sub.prototype,Super.prototype);


Object.setPrototypeOf(Sub,Super); //为了继承类的静态属性或方法

let instance1 = new Sub();
instance1.colors.push("4");
instance1.sayName();

let instance2 = new Sub();
instance2.sayName();