继承例题集

  1. 共享原型
    第一版:
function inherit(Target,Origin){
	Target.prototype = Origin.prototype;
}
Father.prototype.lastName = "Li";
function Father(){}
function Son(){}
//不用原型链的方式
//原型的引用赋值给原型,实现多个构造函数继承一个原型
Son.prototype = Father.prototype;
var son = new Son();

第二版:

function inherit(Target,Origin){
	Target.prototype = Origin.prototype;
}
Father.prototype.lastName = "Li";
function Father(){}
function Son(){}
inherit(Son,Father);//一定是先继承,后用
//不用原型链的方式
//原型的引用赋值给原型,实现多个构造函数继承一个原型
// Son.prototype = Father.prototype;
var son = new Son();//构建对象必须是在inherit之后,注意位置

产生问题:如果son添加私有属性,father的也会添加私有属性
第三版:
在这里插入图片描述

function inherit(Target,Origin){
	F.prototype = Origin.prototype;
	function F(){}
	Target.prototype = new F();
}
Father.prototype.lastName = 'li';
function Father(){}
function Son(){}
inherit(Son,Father);
var son = new Son();
var father = new Father();

在这里插入图片描述
4. 圣杯模式
第四版:

function inherit(Target,Origin){
	function F(){}
	F.prototype = Origin.prototype;//先继承在使用,注意代码位置
	Target.prototype = new F();//先继承在使用,注意代码位置
	Target.prototype.constructor  = Target;//归位——让son.constructor == Son
	Target.prototype.uber = Origin.prototype;//存储实际继承自谁
}
Father.prototype.lastName = 'li';
function Father(){}
function Son(){}
inherit(Son,Father);
var son = new Son();
var father = new Father();

第五版:

Father.prototype.lastName = 'li';
function Father(){}
function Son(){}
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.prototype;
		}
	}())
inherit(Son,Father);
var son = new Son();
var father = new Father();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值