(两年前本人在CSDN博客上的文章,那边都不维护了,今天顺便转过来)
?
JavaScript 相信做 web 编程的程序员没有人不熟悉。不管是 .net 还是 JavaEE ,作为前端的重要技术到处都会用到。大学开始学 web 编程的时候,感觉 JavaScript 这个玩意挺神奇的。能用来写一些简单验证,如判断空、邮箱格式判断、用正则表达式去空格等。大家肯定都写过 JS ,但是真正去研究 JS 的人不知道有多少。以我个人经验,我总是能在网上找到答案,并能实现一些想要的功能。但是很惭愧对 JS 这门语言真不能说是特别的了解。 AJAX 的风行, ext,dwr,jquery 等各种 js 的框架越来越多。 JS 也可以实现面向对象的一些特征。终于还是有必要对这个使用多年脚本做深入学习。
主要内容是看 <Ajax in action> 这本书对于 JS 的介绍,同时结合自己的理解。 JavaScript 的主要特征有 ( 很关键哦,不知道你理解几条 ) :
1. ???????? 弱类型
变量仅仅声明为变量,而不是整数,字符串或者特定类的对象。
Var object 而不是 int a; String b;
经常的变量定义如下 :
var length=10;
var memberId=“abingsky”;
var obj=new Object();
var date = new Date();
var strArr = new Array();
var companyIds=document.getElementById("companyIds").value;
可以从这一点看出来 JavaScript 变量的定义语法有多松散,弹性有多大。对于习惯了 Java 、 C# 的面向对象的严格类型限制的程序员来说,多少有点不习惯。由于 Javascript 是一种动态解释的,所以在运行时会根据值来正确的解释。
2. ???????? 动态解释
JS 不需要预先编译。只是存储成文本,在程序运行时由专门的 JS 引擎解释为机器指令。
3. ???????? 函数是正常的对象
Java 对象的方法与拥有它的对象绑定在一起,只能通过该对象来调用,而 Javascript 的函数可以附加到对象上,使得它们的行为类似于方法。但是它们可以在上下文中调用,并且在运行是附加到其他对象身上。我觉得这也是 JS 语法松散的一个表现,所有的方法可以像变量一样被赋予不同的对象。例如要在页面装载后做一些操作,可以动态的将某一个函数对象赋值给 window.onload.
Window.onload=function (){
displayDiv=document.getElementById('display');
displayDiv.innerHTML= ” Hello,World! ”;
}
附几种常见对象的定义方式:
普通对象
Var myObject=new Object(); 这时候的对象初始化为空,不带有任何属性和方法。可以通过下面方式添加属性和方法:
myObject.shoeSIze=12;
myObject.sayHello=function(){
...
}
数组对象
用中括号括起来
var books=[book1,book2,book3]
JSON 对像
myObject.books={
bestSeller:book1,
cookbook:book2,
spaceFilter:book3
}
4. ???????? 构造函数、类和 prototype 属性
所有的 Javascript 对象是相同基类的实例。而这个基类就是有能力在运行时将成员字段和函数与自己绑定在一起的类。所以可以在运行时给对象分配任意属性。
Function MyObject(name,size){
this.name=name;
this.size=size;
}
var myObj=new MyObject ( ”ttt” , 122 )
设置为 this 关键字的属性的任何东西随后都可以作为对象的一个成员使用。 ( 任何一个函数都可以通过 new 来调用,而生成的对象的属性关键要看该函数里面对于 this 的调用 )
?
prototype :定义了将自动绑定在对象上的属性和函数。 Prototype 在一定程度上为程序员提供了面向对象非常想要的规律性和熟悉感。个人感觉是 JavaScript 非常精髓的一个地方。
prototype 是 JavaScript 对象的一个属性。函数和属性可以与构造函数的 prototype 关联起来。然后 prototype 和 new 关键字协同工作,当使用 new 调用函数时,函数 prototype 的所以属性和方法会附加到结果对象上。
Function MyObject(name,size){
this.name=name;
this.size=size;
}
MyObject.protype.tellSize=function(){
alert( “ size of ”+ this.name+ ” is ” +this.size);
}
prototype 机制也可以与内建类协同工作。 DOM 节点在 IE 不能扩展,但在其他的核心类在所有主要的浏览器中都是可以扩展的。内建类包括 (Array,Object,Date 等 ) 。如可以为 Array 类定义一些有作用的帮助函数:
Array.prototype.indexof=function(obj){
var result=-1;
for(var i=0;i<this.length;i++){
if(this[i]==obj){
result=i;
break;
}
}
return result;
}
这样定义之后 Array 类就有了一个方法 indexof ,和 java 里的基本一样。
?
以上是关于 JavaScript 几个关键特点的理解,可参考 Ajax in action 这本书里面的附录介绍。不知道你对 JavaScript 理解多少,一起来学习吧。