基本上每名在开发设计JavaScript时试着运用朝向目标技术性的开发设计者,多多少少都是问一下自己一个难题: 怎样启用父类(super class)的方式? 在Ajax技术性还没有有现阶段那样趋之若鹜以前,这类难题非常少出現,由于大多数数开发设计者仅在开展顾客端form认证或是简易的DHTML/DOM实际操作时应用JavaScript。在哪些简易的处理计划方案中,涵数式程序编写(functional programming)是很更有意义的,朝向目标程序编写则处于其次关键的部位。如今,Ajax技术性发展趋势趋势迅速,开发设计者早已创建了一个启用很多顾客端JavaScript、持续提高的、繁杂的系统软件。因而,在JavaScript上试着OO技术性便变成了管理方法繁杂性的一种方式。在此全过程中,大部分开发设计者迅速便了解到:JavaScript是一种原形化的(prototypical)語言,它缺乏OO本身产生的多种多样便捷。 OO设计方案的中心思想和有关它的一些话题讨论说起来非常大,但只着眼于于Class的界定方法,我觉得它是JavaScript开发设计者试着处理难题的优选。因而,你可以以在互连在网上寻找很多不一样的难题处理实例,但在我觉得过他们后免不了一些心寒 这种实例全是在某一场所下可用,而并不是放之四海而皆准的通法。而我对这一话题讨论的兴趣爱好来源于于我的team在开发设计 ThinWire Ajax Framework 的危害。因为这一架构转化成出对顾客端编码的要求,才使大家 迫不得已 去完成靠谱的、适用父类方式启用的OO方式。根据父类启用,你可以以进一步借助类的承继特点来关键化通用性编码,进而更加容易于降低反复编码,除掉顾客端编码的坏味儿。 下边列举出了一些在我的科学研究全过程中碰到的处理方法。最后,也没有从这当中找到一个能够接受的处理计划方案,因此我不会得虚假现一个自身的处理计划方案,你将在文中的末尾一部分见到这一计划方案。 但是父类启用在这里里是最大要的OO体制,因而我必须一个相对的工作中方式,也更是由于在我的见解中华型化方法是丑恶的,因此我更必须一种更为当然地应用JavaScript界定类的方式。 More Solutions: 行吧,要我们进到探讨。如同开发设计者所发觉的那般,在JS中完成基本的承继是非常容易的事,客观事实上面有一些大家都知道的方式: 丑恶的Solution: 沒有开展父类启用的简易承继: // 提早写好的JavaScript Class界定和承继 // 自然,这类编码难看陋,释放着编码的坏味儿。 function BaseClass() { //BaseClass constructor code goes here BaseClass.prototype.getName = function() { return BaseClass function SubClass() { //SubClass constructor code goes here //Inherit the methods of BaseClass SubClass.prototype = new BaseClass(); //Override the parent s getName method SubClass.prototype.getName = function() { return SubClass //Alerts SubClass alert(new SubClass().getName()); 造成 IE运行内存泄漏 的Solution: 这类完成方法可以造成在IE中的运行内存泄露,你应当尽可能防止: // 运作时的JavaScript Class 界定和承继 // Explorer中的运行内存泄露. function BaseClass() { this.getName = function() { return BaseClass //BaseClass constructor code goes here function SubClass() { //在目标案例创建时轻载父类的getName方式 this.getName = function() { return SubClass //SubClass constructor code goes here //Inherit the methods of BaseClass SubClass.prototype = new BaseClass(); //Alerts SubClass alert(new SubClass().getName()); 如同我还在第一个完成方式中常注解的那般,第一个完成方式一些丑恶,但它对比造成运行内存泄露的第二种方法就是优选了。 我将这二种方式放到这儿的目地就是指出你没应当应用他们。 (责任编辑:admin) |