1. 程式人生 > 資訊 >NPD 美國 6 月遊戲報告出爐:Xbox Series 位居主機銷售額榜第一

NPD 美國 6 月遊戲報告出爐:Xbox Series 位居主機銷售額榜第一

繼承的發展史

1.傳統形式(原型繼承) ,過多繼承了沒有用的屬性

例子:

Grand.prototype.lastName = '張三';
function Grand(){this.age = 25}
var grand = new Grand();
Father.prototype = grand;
function Father(){this.sex = '男'}
var father = new Father();
Son.prototype = father;
function Son(){}
var son = new Son();
console.log(son.lastName);

2.借用建構函式(call/apply),不能繼承建構函式的原型,多走一個函式

例子:

// 借用建構函式
A.prototype.lastName = '李四';
function A(){
    this.age = 26;
    this.name = '張三';
    this.sex = '男';
}
function B(age,name,sex,address){
    A.call(this,age,name,sex);
    this.address = 'beijing';
}
var b = new B();
console.log(b.lastName);

3.共享原型,不能隨便改動自己的原型 (使用廣)

// 共享原型
A.prototype.lastName='王五';
function A(){}
B.prototype = A.prototype;
function B(){}
var b = new B();
console.log(b.lastName);

// 封裝一下
function extend(Target,Origin){
    Target.prototype = Origin.prototype;
}
A.prototype.lastName = '趙六';
function A(){}
function B(){}
var b  = new B();
extend(B,A);
console.log(b.lastName);

4.聖盃模式

// 聖盃模式(完美版繼承)
var extend = (function(){
    var F = function(){};
    return function(Target,Origin){
        F.prototype = Origin.prototype;
        Target.prototype = new F();
        // 讓建構函式迴歸
        Target.prototype.constructor = Target;
        // Target到底繼承誰
        // Traget.prototype.uber = Origin.prototype;
    }
}())
A.prototype.lastName = '田七';
function A(){}
function B(){}
extend(B,A);
var b = new B();
console.log(b.lastName);