在这里我要介绍一个我早些时间编写的一个封装XML DOM操作的库 CXML。写这个库的原因都是基于对XML DOM操作的繁杂性和重复性,况且不用说它的效率底下了,这是我们都感同身受的。CXML可以操作导入的xml文件以及xml字符串,CXML里提供了四个接口方法:load,toXMLString,getXMLObject,selectNodes。需要指出的一点是,load和selectNodes方法是最强大的部分。当然了,CXML同时还可以跟使用Ajax通过responseXML返回的XML DOM对象结合使用。 load:提供了一个参数,该参数可以一个xml文件的URL,也可以是一段符合xml语法的xml字符串。比如:cxml.load(“supersha24“),或者cxml.load(“http://www.ilovejs.net/xml/test.xml”); toXMLString:该方法带有一个可选择的node节点,返回该节点内的xml字符串,默认是XML DOM实力对象。 getXMLObject:返回XML DOM实力对象。 selectNodes:该方法的参数是一个css形式的selectors,从XML DOM对象中查询节点集合。支持的selectors在下面会有说明。
基于自己对YUI3中on方法的喜爱,忍不住想要去自己实现它,早期本人开发了一个cSelector库,这个库是用来通过selectors来查询DOM的,类似与jQuery的selectors功能。因此,想要实现on的操作方式就非常简单了,首先说明一下YUI中on方法的语法: [javascript] Y.on(type,fn,id,context); [/javascript] id不单止是一个HTML中的id而已,它可以是css2、3中的selectors,组合查询DOM,将查询到的DOM元素添加type驱动事件fn。这种思想非常的不错。也是自己想要去模仿它的原因,一个是实践,另一个也是加深对它的思想的理解。 cSelector库中支持普通的selector,比如: [css] #id .class first-child last-child nth-child > tag only-child *= $= ^= [attr] [/css] … 了解更多
javascrpt里继承的方式很多种,有类式继承和原型继承(权威的解释:Prototypal Inheritance in JavaScript Classical Inheritance in JavaScript)。js没有像java那种只要通过一个extends关键字来声明继承的方式,它的实现方式是比较丑陋的,所以封装这个继承过程就显得尤为重要了。 下面我来说明一种链式封装继承的方式,这种方式需要扩展鼎鼎大名的method和inherits扩展方法。method是douglas crockford通过扩展Function类来方便声明方法从而出名。 [javascript] //首先来实现method扩展方法: Function.prototype.method=function(name,fn){ if(!this.prototype.name){ //验证是否已经存在该方法 this.prototype[name]=fn; } return this; } … 了解更多
在编写javascript的时候,循环是我们经常会进行的操作,尽管目前编写循环的方式多种多样,但是在性能方面还是有区别的,下面我们来看看都有那些循环方式。 第一种:普通的方式,这种方式的性能是比较差的,因为在每次循环的时候都需要计算数组的length一次,在javascript的数组操作中,对length属性的操作的性能是比较慢的,所以尽量在循环内避免使用过多的length操作,包括shift,unshift,pop等等。 [javascript] //假如arr是一个很大的数组 for(var i=0;i<arr.length;i++){ …. } [/javascript] 第二种:缓存数组的length属性,这中方式优化了不少性能,通过一个变量来缓存数组的length,这样每次循环就不需要重复计算数组的length值了。 [javascript] for(var i=0,l=arr.length;i<l;i++){ …. } [/javascript]
Javascript里面没有类、继承这样的概念,但是并不代表Javascript不能够实现“继承”。Javascript是一种基于原型链的解释语言,当然也是一种面向对象的语言。既然它面向对象,就不得不需要使用OOP这样的编程方式来编写良好的Javascript代码,编写OOP方式的代码的好处就在于易封装、广重用、易维护等等。Javascript里的知识繁多,现在来简单的讲一下我对Javascript继承的理解。 首先,我们先写一个简单的“父类”Person: [javascript] var Person=function(n){ this.name=n; } Person.prototype={ //这里Person.prototype给赋值了一个对象,有意思 getName:function(){ return this.name; } } [/javascript] 我相信上面的代码是Front-End都能看懂的。上面的代码有意思的地方是Person.prototype给赋值了一个对象。好,下面来简单实现一个“子类”Student: [javascript] var Student=function(n,a){ Person.call(this,n); … 了解更多