JavaScript继承模式

1.原型链继承

2.call/apply  实现继承

3.共享继承

Father.prototype.name = "zhang";
function Father() {
    
}

function Son() {
    
}

// 继承实现函数
function extends(Target, Origin) {
    Target.prototype = Origin.prototype;
}

extends(Son, Father)


var son = new Son();
var father = new Father();

/*
这样son  和 father 是共用的一个prototype
如果给Son新增sex属性
Son.prototype.sex = "male";
Father的原型也会增加此属性
*/

/**/

下面修正上面的弊端:

Father.prototype.name = "zhang";
function Father() {
    
}

function Son() {
    
}

// 继承实现函数
function extends(Target, Origin) {
    function F() {};
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.uber = Origin.prototype;  // 注明继承自谁  以备后用
    /*
    这样Son的构造器constructor  是Father
    修改这种状况
    Target.prototype.constructor = Target;
    */
}

extends(Son, Father)


var son = new Son();
var father = new Father();

/*
这样son  和 father  就不是是共用的一个prototype了
而且实现了继承
*/

/**/

更高级的继承函数写法:
 

var extends = (function () {
    var F = function() {};

    return function (Target, Origin) {
        F.prototype = Origin.prototype;
        Target.prototype = new F();
        Target.prototype.uber = Origin.prototype;  // 注明继承自谁  以备后用
        
        /*
        这样Son的构造器constructor  是Father
        修改这种状况:
        */
        Target.prototype.constructor = Target;
 
    }

}());

 

你可能感兴趣的:(JavaScript)