day26 继承模式

继承发展史
1、传统模式 – 原型链

继承了过多没用的属性

2、call/apply借用构造函数

不能继承借用构造函数的原型;
每次构造函数要多走一个函数。

3、共享原型
Father.prototype.lastName = "GT";
function Father(){ }
function Son(){ }
Son.prototype = Father.prototype
var son = new Son();
var father = new Father();
1)封装一个用于继承的函数

参数传的是构造函数,我们不是让单独一个对象取继承东西(直接改对象的__proto__就好啦),而是让构造函数的prototype去继承,那么它生产出来的对象全都继承了该原型。


function inherit(Target,Origin){
	Target.prototype = Origin.prototype;	
}
inherit(Son,Father); --> 先继承 后调用
var son = new Son();

上面的封装函数中,继承与被继承的两个构造函数的原型指向同一个房间,继承者无法实现私有个性化地给自己的原型增删改。因此下面需要完善这个方法。

2)圣杯模式
function inherit(Target,Origin){
    function F(){};
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.constructor = Target; --> 构造函数归位
    Target.prototype.uber = Origin.prototype; -->真正继承的超类
}
3)圣杯模式优化

再进一步优化,利用立即执行函数以及闭包实现私有化应用

var inherit  = (function(){
	var F = function(){};
	return function(Target,Origin){
		F.prototype = Origin.prototype;
		Target.prototype = new F();
		Target.prototype.constructor = Target;
		Target.prototype.uber = Origin;
	}
}());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值