我今天做的尝试是,如何更它更像其他的语言一样的使用继承机制,多层继承和更方面的调用父类的构造。
我希望达到的效果:

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

实例:

[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就能根据不同的来,来获得类的父类构造器并执行。

javascript类式继承新的尝试的更多相关文章

  1. javascript类式继承新的尝试

    研究javascript是很有意思的事情,以前我说过,在javascript中的继承,在于维持prototype指向同一object就行了,确实这样

  2. js类式继承的具体实现方法

    这篇文章主要介绍了js类式继承的具体实现方法,有需要的朋友可以参考一下

  3. JS继承--原型链继承和类式继承

    本篇文章小编将为大家介绍JS继承--原型链继承和类式继承,有需要的朋友可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部