从界面设计到业务逻辑的实现,很多都涉及JavaScript。
这个附录的作用不是教你如何使用JavaScript编程,现在已经有很多在这方面讲得比较好的书和文章。我在这里想说明的是几个能够帮助Java和C#程序员用相对简单的方法来快速掌握JavaScript编程。如果你是一个拥有面向对象设计背景的企业程序员,在刚接触JavaScript的时候有可能会受以前的Java 或者C#的经验影响,有可能觉得自己并不能很好地掌握它用它来工作。当然,以前我也是这样,所以我现在用同样的方法来启蒙别人。JavaScript能做一些Java和C#做不了的事情,其中有一些能够帮助你写出更好的代码,而另一些则会让你反其道而行之。对于这两种情况,我们都应该了解,不管是更好的利用这些技巧还是不自觉地避免。如果你再用过Java和C#这些面向对象语言的基础上来学习Ajax,我希望这篇附录能够像几年前对我一样对你也有用。
B1 JavaScript不是Java
从名字上来看,Java和JavaScript更像是总的与分支的关系,JavaScript在最后一刻被Netscape的市场补从“livescript”重新命名,然而比并不像大多数人所认为的那样,JavaScript并不是C语言家族的一员。它与Scheme和Self等功能性语言相差很多,但是又跟Python有很多相似点。然而,它被以Java命名,并且从字面看也有很多地方与Java相似。在有些地方,它与Java类似,但在有些地方与Java完全不同。主要的差异如表B.1所示。
表B.1 JavaScript的主要特征以及含义
特征 | 含义 |
变量松类型 | 变量只被声明为变量,不是integer,string和对象或者是指定的类。对同一变量可以进行不同类型的赋值。 |
代码动态编译 | 在运行的时候,代码以文本格式存储并且在程序运行的时候编译成机器码,这与预编译语言Java,C,C#相反,用户基本可以看到Ajax的源代码。而且,允许别的语言动态生成所需代码,不用再次编译成字节码。 |
JavaScript的函数是一类对象 | Java对象的方法都是属于拥有它的对象,并且只有通过这个对象才能进行访问,JavaScript的函数可以任意给对象,并且像方法一样执行,但是他们还可以在其他上下文中被其他对象调用。 |
JavaScript的对象基于原型 | Java, C++还有 C#的对象都有一个固定的类型,有超类,虚拟超类,或者接口,这些严格的定义了它们的功能。 JavaScript的对象只是对象,其实是一个关联的数组,在JavaScript中可以使用prototype来效仿Java,但是这种相似性只是表面的。 |
这些区别允许语言可以通过不同的方式被利用,但是也为一些恶作剧开启了后门。如果你是一个聪明的严谨的程序员,那你就可以利用这些来做了不起的事情,而且可能只需要几百行代码。
我试过很多次,最后得到一个结论就是让事情变得简单总是好的。如果你正在一个团体内工作的话,如果技术领导觉得有必要的话,应该将前面的内容写入编码规约或者是指导手册里面。还有需要知道这些区别以及技巧的第二个原因是,浏览器会在内部使用一些上面的规则,所以有必要理解这些以便能在调试程序的时候节省时间和精力。尤其是,我发现在知道那些表面相似点只限于表面的情况下,对知道在哪些地方代码不会像Java一样运行很有用。所以继续读吧,然后看看JavaScript的对象究竟是怎么工作的,它们是怎样由域和函数组成,JavaScript的函数又究竟能干什么。