作家
登录

javascript类式继承新的尝试

作者: 来源:www.28hudong.com 2013-03-30 00:35:32 阅读 我要评论

我今天做的尝试是,如何更它更像其他的语言一样的使用继承机制,多层继承和更方面的调用父类的构造。 我希望达到的效果: 复制代码 代码如下: function A(){ alert('a'); } function B(){ this.$supClass(); alert('b'); } extend(B,A); function C(){ this.$supClass(); alert('c'); } extend(C,B); var c = new C(); alert( c instanceof A ); //true alert( c instanceof B ); //true alert( c instanceof C ); //true 实例: js继承 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 我的extend是这样写的: 复制代码 代码如下: function extend(subClass,supClass){ var fun = function(){}, prototype = subClass.prototype; fun.prototype = supClass.prototype; subClass.prototype = new fun(); for(var i in prototype){ subClass.prototype[i] = prototype[i]; } subClass.$supClass = supClass; subClass.prototype.$supClass = function(){ var supClass = arguments.callee.caller.$supClass; if(typeof supClass == 'function'){ supClass.apply(this,arguments); this.$supClass = supClass; } }; subClass.prototype.constructor = subClass; return subClass; } 也许你会问,为什么不这样写: 复制代码 代码如下: function extend(subClass,supClass){ var fun = function(){}, prototype = subClass.prototype; fun.prototype = supClass.prototype; subClass.prototype = new fun(); for(var i in prototype){ subClass.prototype[i] = prototype[i]; } subClass.prototype.$supClass = function(){ supClass.apply(this,arguments); }; subClass.prototype.constructor = subClass; return subClass; } 这样看似没有问题,只有一级继承时会运行的很好,但是,如果多级继承时,就会造成死循环,因为: 复制代码 代码如下: subClass.prototype.$supClass = function(){ supClass.apply(this,arguments); }; 这个方法会被一直覆盖重写掉,而造成死循环。 而我的做法是,用类的$supClass属性指向它所继承的父类构造,在prototype中也有个$supClass方法,这个$supClass第一次必须要在类的构造器中执行,prototype.$supClass在执行时,会通过arguments.callee.caller.$supClass来获得类的$supClass,然后通过apply在this执行。 这样$subClass就能根据不同的来,来获得类的父类构造器并执行。

  推荐阅读

  js日历功能对象

需求产生问题:本来想在网上找个js代码,可是发现要么太复杂,要么不好控制,要么兼容性不好...... 问题分析: 发现不是优秀的就是最好的.... 适合自己的就是最好的。 问题解决: 决定自己写一个日历 功能。 代码呈>>>详细阅读


本文标题:javascript类式继承新的尝试

地址:http://www.17bianji.com/kaifa2/JS/23738.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)