原型模式

原型模式主要是为了代码重用。问题在于在子类的指针指向父类的可重用数据时,应该怎么处理,因为共享意味着互相影响。子类修改了共享的数据,也会影响父类。所以这里需要用一个中间的,空白的函数作中继。这样不仅可以重用父类的代码和数据,还可以重写父类的的数据和方法而不影响父类。

function Parent(name){
    this.name = name;
}


Parent.prototype.show = function(){
    console.log(this.name + "  from Parent");
}


function Children(name){
    Parent.apply(this,arguments);
}


function F() {


}
F.prototype = Parent.prototype;
Children.prototype =  new F();//new Parent()


Children.prototype.show = function(){
    console.log(this.name + " from Children");
}


new Children('hi').show();

new Parent('hi').show();


重点是Children.prototype =  new F();//new Parent()这一句,new Parent()也能达到这种效果,如果Parent函数是空函数,其实就等价于new F(),但是除了父类的原型外,父类函数里往往会有可供子类重用的代码,比如帮助子类初始化数据的代码    this.name = name;使得子类可以以 Parent.apply(this,arguments);这样的形式重用。而如果Parent不为空,那么new Parent()作为原型的时候,this.name = name生成的变量空间就会被浪费。所以利用一个空的F函数作为中继会比较好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值