今天再讲下js里的继承

js的继承说简单也很简单,请看:

 

function SuperClass(){
...
}

SuperClass.prototype.xxx = function(){...}
...

function SubClass(){
...
}

SubClass.prototype = new SuperClass();

 看着是不是很简单?不过问题来了。

 

//这句似乎改变了SubClass的constructor噢
SubClass.prototype = new SuperClass();

 怎么办?再加一句打个补丁哈。。

SubClass.prototype = new SuperClass();
SubClass.prototype.constructor = SubClass;

 这样看着好像完美都啦 :)

请慢!!!

//这里好像同样也覆盖了SubClass原来的原型函数噢,肿么办???
SubClass.prototype = new SuperClass();

 对了!先保存原来的原型函数,后面再恢复回来!具体的实现我就不写咯。。

到这里一切该结束了吧!!哼!一个继承用得着这么复杂么?

 

等等,大哥,这事还没完呢!

/**
 * 还是这一句!怎么又是你啊,麻烦真够多的:(
 * 这一句有一个隐藏的问题?想到了没。
 * SuperClass的构造器里也许有着很复杂的逻辑呢。比如:
 * 1.执行了一个超长时间的阻塞操作
 * 2.加载了大量的数据
 * 问题来了:CPU被白白的浪费了,内存也被白白的占用了
 * 我只是想继承你的原型方法而已嘛,你不用为我做这么多的实例化操作的...
 */
SubClass.prototype = new SuperClass();

 这可肿么办哈。。。

ecmascript5 提供了一个Object.create的方法,用在这里挺不错的,怎么做呢?

SubClass.prototype = Object.create(SuperClass.prototype);

 可是IE8好像还不支持耶。别急,那就这样来呗:

var F = new Function();
F.prototype = SuperClass.prototype;
...
SubClass.prototype = new F();//这下终于没有多余的实例化操作啦
...

 

然后把上面的点都连在一起就可以有一个不错的继承方法啦。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值