Javascript 一种语法宽松而表现丰富的语言,让不同的程序员有不同的写作风格;又由于其在不同的浏览器中表现并不一志,再加上调试的不便,让它成为了WEB开发中比较难的一块。
说js我们不得不说说json,至于json是什么我就不谈了,我要谈的是其中的一个特性,那就是{}。在js中,我们可以像这样来声明一个对象 var user = {username: "Sander", password: "123456"}; 之后我们就可以像其它语言中使用类一样来使用这个user对象。 如: user.username 得到折就是 Sander 这个字符串。从这个例子我们再扩展一下,例如: var user = {username: "Sander", password: "123456", login:function(username, password){}} 。从这个例子中我们可以看到user的login属性是一个函数,这是js相对于其它语言宽松的地方,属性可以是函数。因为这样,我们就可以用user.login("abc", "ooo");这样的形式来调用这个函数,相当于其它语言中调用类的方法一样,是不是比较爽呢?这就是各大JS框架常用的写法,只要我们明白了其中的原理,那看别人的代码的时候就不会感觉不知所谓了。还有一种比较常用的写法就是我们先写一个函数,再通过prototype给它扩展属性(这里说的prototype不是指比较有名的JS类Prototype,而是js相对于其它语言来说比较有个性的一个特别的功能)。例如:var a = function(){}; a.prototype.sayHello = function(){alert("Hello, every one.");}。这样子写出来的a就有点像其它语言里面的类了,我们可以这样声明一个类:var b = new a();再通过这样b.sayHello();来调用它的方法。
要谈JS,我们不得不说说一些所谓的事件。在DOM里,我们给一个对象绑上事件是不能传参数的,或者说是不能直接传参数的。假如textBox是一个TextBoX对像,我们要给他的onChange事件附加一个函数,我们在JS代码里面只能这样子写:textBox.onChange = fun;(fun 是一个函数,并且是一个无参的函数)。在当前的fun函数里他的this指针指向的就是textBox,我们无法取得外部的其它信息,而这往往不是我们想要的。要改变this指针,我们就得借用像这样的一种函数:
return function() {
pFunc.apply(oThis, arguments);
};
}
textBox.onChange = createDelegate(this, fun);这样的话fun得到的this指针就是外面的this指针,不再是textBox对像(不记得这样子说是不是正确的,因为很久没用这种方式了)。 虽然上面说了这么多的事件的内容,但这种写法并不是我鼓励大家的方式,因为这种写法并不对各种浏览器通用。在IE里的onChange在类firefox的浏览器里叫change事件,没有前面的on, 所以我一般会借用一些比较成熟的JS代码类来帮助我完成这些麻烦的事情,因为我们写的代码不可能针对各种各样的浏览器进行测试,一般只要针对IE和Firefox进行测试,并且在一些特别的问题上借用一些别人已经测试好的代码,我们的JS也基本上是通用的。在事件处理的方法上我比较喜欢yahoo ui里面的addListener方法。具体的写法是:
YAHOO.util.Event.addListener(textBox, "change", fun, "some thing you want");最后的一个参数就是我们想传给fun的一些东东。不过fun的函数得写成这样的形式:var fun = function(evt, p){}, p得到的就是前面的最后一个参数传达室来的值,而evt得到的是event对象。(今天就先说到这,有时间再补充一下。)