宁波网站推广排名,这种资源网站怎么做才赚钱,wordpress 禁用搜索,公司网站修改怎么做Javascript对于做过Web程序的人不应该是陌生#xff0c;初期是用来做一些简单的FORM验证#xff0c;基本上是在玩弄一些技巧性的东西。IE 4.0引入了DHTML#xff0c;同时为了对抗Netscape的Javascript,提出了自己的脚本语言JScript#xff0c;除了遵循EMAC的标准之外#…Javascript对于做过Web程序的人不应该是陌生初期是用来做一些简单的FORM验证基本上是在玩弄一些技巧性的东西。IE 4.0引入了DHTML同时为了对抗Netscape的Javascript,提出了自己的脚本语言JScript除了遵循EMAC的标准之外同时增加了许多扩展如下要提到的OOP编程就是其中的一个为了命且概念我以下提到的Javascript都是Microsoft Internet Explorer 4.0以上实现的JScript,对于Netscape我没有做过太多的程序所以一些的区别也就看出来。 Javascript不是一个支持面向对象的语言更加算不上一个开发平台但是Javascript提供了一个非常强大的基于prototype的面向对象调用功能你可以在你自己需要的地方使用他们。因此,如何使用对象本文尽可能从Javascript面向对象实现原理出发解析清楚它的工作模型。在了解这些模型之后你可以在自己的脚本库中编写一些实现代码然后在其他地方调用。 Javascript的语法和C很接近不过在类实现中没有使用关键字Class,实现继承的时候也没有采用传统的Public或者Implement等等所谓的关键字来标示类的实现。这样的情况下可能有就有人会问如何编写Javascript的Class如何实现继承。我开始也是百思不得其解后来看了MSDN,才知道采用了prototype来实现包括继承和重载也可以通过这个关键字来实现。 Javascript的函数很奇怪每个都是默认实现了Optional的即参数都可以可选的function a(var1,var2,var3),在调用的过程中a(),a(value1),a(value1,value2)等等的调用都是正确的至少在即使编译部分可以完整通过至于其它只是和函数的实现逻辑比较相关了。 以下就JS对于类的实现、继承、重载详细介绍其实现方式。 1。实现 Js类的实现就通过函数直接实现的每个函数可以直接看成class如下代码 function ClassTest1(){ ...//implement code } var anew ClassTest1 function ClassTest2(var1){ ...//implement code } var bnew ClassTest(value) 对于类的属性可以通过两种方式实现 1this.Property or Method的方式实现在类声明函数中直接给出函数的实现如 this.Addnew function(strUserName,strPassword)这样的方式调用编写的方式在Class Function中调用。 2通过ClassFunction.prototype.[FunctionName]function(var1,var2...){//todo}这样的方式完成调用。 这两种方式从目标来看是一致的按照我个人的观点来看区别的只是在于实现方式通过this.propertyName的方式来创建Jscript自动创建了property或者method的入口不过从程序的角度而言还是使用prototype的关键字实现比较灵活。 另外Javascript也可以和我们C中那种嵌套声明的方法来声明,C实现的方法如下 Public Class ClassName:ParentClass{ Public DataType FunctionName(){ } Public Class ClassName{ Public DataType FunctionName(){ } } } 在Javascript当中当然不存在class这样的关键字了,所以实现起来有点戏剧性不过仍然为一个非常巧妙的实现。 function className(){ //Property Implement this.UserNameblue; //Method Implement this.Addnew function(){ } //Sub Class Implement function SubClassName(){ this.PropertyNamehi } //sub class method implement SubClassName.prototype.Changefunction{ } } //Main Class Method Implement className.prototype.Deletefunction(){ } 如上的代码大致演示了Javascript类中属性和方法的实现另外有一点比较困惑整个class中都是public的没有关键字private之类的可以控制某些方法是否隐藏那么在我们编写代码实现的规范中我看国外一些程序员都是使用_functionName这样子为函数命的方法来区分但是在调用过程中实际还可以调用的。 实现了属性和方法剩下的就是Event的实现了我查找了许多资料包括整个MSDN关于JScript的参考都没有看到一个很好的模型关于事件实现的后来参考了一些站点编写HTA(HTML Component,有空我会写一些相关的文章的实现借助于比较扭曲我个人认为的方法可以大致的实现基于事件驱动的功能。大致的思路是这样子的 1.将所有的事件定义成属性只要简单的声明就可以 2.在需要触发事件的代码中判断事件属性是否是一个函数如果是函数直接执行函数代码如果是字符串那么执行字符串函数通过eval(str)来执行。 3) .在类的实例当中注册事件函数。 为了简单说明如上的思路采用timer这样简单的例子来表述如上的所提到的内容如果只是为了简单的实现timer的功能Javascript中setInterval函数就可以满足全部的要求如下的代码只是用来说明Timer的工作原理。 //Class For Timerfunction Timer(iInterval){ //if not set the timer interval ,then defalut set to 500ms this.IntervaliInterval || 500; this._handleInterval; this.TimerEventnull function Start(){ if(this.Interval!0){ this._handleIntervalsetInterval(TimerCallBack(),this.Interval); } } function Start(){ clearInterval(this._handleInterval); } function TimerCallBack(){ if (typeof this.TimerEventfunction){ this.TimerEvent(); } else if(this.TimerEvent!null this.TimerEvent.length0){ eval(this.TimerEvent); } }} //Code for Instancevar tnew Timer(3); //------------------------------------// //1.t.TimerEventfunction(){//todo} //2.t.TimerEventalert(\hello\); //3. t.TimerEventtTimerCall; //----------------------------------//t.Start();t.Stop(); function tTimerCall(){ } 实际工作代码是在TimerCallBack()上面实现事件触发作为属性的方式来实现在应用实例中代码提供了三种方法去调用事件不过在事件的回调当中我还没有想到如何可以带参数只有才各自的实现当中访问各自需要的属性才能够实现全部的要求。 2。继承。 刚采用了大篇幅的文字去介绍如何实现Javascript的各种实现也就是从逻辑上完成了一个封装class的实现从某种意义上来说class的实现是真正脚本编程中使用最多的部分不过如果只是要完成如上的功能使用VBScript来编写更能更加清晰毕竟VBscript提供了class关键字同时提供了public 和private这两个关键字可以清晰的将公共和私有对象分离至于事件的实现也可以采用类似Javascript实现的思路只是对于函数的引用需要采用GetRef这个函数具体的用法可以参考scripting reference,MSDN里头也有详细的介绍而Javascript强大至于在于如下要说的了虽然具体的东西可能不多。 如上所言我们已经完成了一个基本的类实现Timer现在要做的是重新编写这个类我们简单的只是想在这个类之中加入一个方法提供当前的系统时间方法的名称为getSystemDate,显然如果全部重新编写那就失去了我这里说的意义了。先看看如下的实现。 function NewTimer(iInterval){ //call super this.baseTimer; this.baseiInterval); } NewTimer.prototypenew Timer; NewTimer.prototype.getSystemDatefunction(){ var dtnew Date(); return dt.getYear()-dt.getMonth()-dt.getDay() } 上述代码实现了NewTimer类从Timer继承Javascript没有使用“”或者java的public那样类似的关键字只是通过newclassname.prototypenew baseclass这样的方法来完成同时NewTimer实现了getSystemDate的方法在NewTimer的初始化函数中我使用了this.baseTimer是为了引用父类的实现不过在对于父类其他实现函数的调用到现在我没有找到一个确定的方法是否通过this.base.start()那样来调用还是其他的如果有谁比较清楚的麻烦告诉我另外在netscape的站点上我查到有一个特殊的__proto__的属性好像是对于父类的直接引用不过具体的我也没有尝试过在msdn中也没有看到对于__proto__的支持。 3。重载 或许这个是OOP编程中比较复杂的地方了在Javascript的实现中有点无奈也就是通过prototype的方式来完成的不过因为我不清楚如何调用父类的实现函数那么在重载中只能够重新编写所有的实现了另外就是在实现中实例化一个父类然后通过调用它来返回需要的东西。 Javascript中所有的对象都是从Object继承下来的object提供了toString()的方法也就是说如果调用alert(objInstance)这样的过程实际上是调用了alert(objInstance.toString())的方法如果没有编写实现object默认的toString()都是object object这样子的在许多地方需要重载这个函数的比如Timer,如果我们希望var insnew Timer(5);alert(ins)调用得到的是interval的值5那么就需要重新编写toString()方法了 Timer.prototype.toStringfunction(){ return this.Interval}; 以上代码实现之后alert(ins)得到的就是5了。转载于:https://www.cnblogs.com/pricks/archive/2010/02/10/1667092.html