欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > JS教程 >

解开AJAX技术生命中的达芬奇明码

发表于2019-04-23 22:07| 次阅读| 来源网络整理| 作者session

摘要:解开AJAX技术生命中的达芬奇明码

解开AJAX技术生命中的达芬奇明码

 

  几乎每位在开发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 定义和承继
// 看下来很传统,但这些脚本会导致在Internet 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());


  就像我在第一个完成方法中所注释的那样,第一个完成方法有些俊俏,但它相比惹起内存走漏的第二种模式便是首选了。

  我把这两种方法放在这里的目标是指出你不应该利用它们。