作家
登录

一个JavaScript继承的实现

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

Author:尹伟铭 Blog:http://my.donews.com/yinwm/ 如我前面的文章说的,对于JavaScript,一个类,就是一个function,他的类方法(也就是static的)都是作为这个function的一部分,而实例方法,都是在prototype上面的。 function ClassA() { } ClassA.staticMethod = function () { } ClassA.prototype.instanceMethod = function () { } 在我这个实现当中,一个类的继承是拷贝父类的所有类方法,这样子类就有了父类的静态方法。 然后让子类的prototype.prototype指向父类的prototype. 然后可以根据自己的需要,重写一些方法。 function ClassB() { } ClassB.staticMethod = ClassA.staticMethod; ClassB.prototype.prototype = ClassA.prototype; ClassB.prototype.instanceMethod = function () { // method 2 } 对于子类,使用一个prototype的链,来实现方法的实例方法的继承。之所以选择这种实现方法,是因为子类是要重写其中的某些方法的。而prototype又是一个reference,所以直接的写作ClassB.prototype = ClassA.prototype,会在重写ClassB的实例方法的同时,破坏ClassA的实例方法。而修改后的方法则会屏蔽父类的。 寻找方法的顺序是,instanceA.prototype.method -> ClassA.prototype. 此时对于类方法的继承,已经实现,现在需要实现在子类中,调用父类的方法。 对于Java,这样的使用是很平常的 public void method() { super.method(); } 在JavsScript中,为了实现此类功能,所以必须保留一个parent的reference,指向ParentClass.prototype. ClassB.prototype.parent = ClassA.prototype. 那么在instanceB里面调用this.parent.method.call(this);就可以使用父类的方法了。使用call调用,是为了把自己的数据传到父类。更漂亮的解决方法,我还没有想到。 所以完成的代码是 function ClassA() { } ClassA.prototype.method1 = function () { } ClassA.staticMethod = function () { } function ClassB(){ } ClassB.staticMethod = ClassA.staticMethod; ClassB.prototype.prototype = ClassB.prototype.parent = ClassA.prototype; 这个我抽象出来一个extend方法, var LCore = function () { } LCore.extend = function (destination, source) { // copy all functons for (var prop in source) { if (prop == “prototype”) { continue; } destination.prototype[prop] = source[prop]; } // make a reference for parent and reference prototype destination.prototype.prototype = destination.prototype.parent = source.prototype; return destination; }

  推荐阅读

  光标的一些操作总结

IE下的Range操作比Mozilla下强很多,这里只讨论IE下的操作。 这里选介绍几个光标定位的特点:1.光标不变 直接obj.focus(),光标会返回之前的位置,即位置不变 2.光标在最前 复制代码 代码如下:var r = obj.cre>>>详细阅读


本文标题:一个JavaScript继承的实现

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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