所谓方法(method),其实就是通过对对象调用的javascript函数。我们可以将函数赋给任何变量,甚至赋给一个对象的任何属性。如果有一个函数f和一个对象o,就可以使用下面的代码定义一个名为m的方法:
o.m=f;
注意:我们这里省略了f函数的园括号。如果写成:
o.m=f();
那么将执行f函数,并且用他的返回值来给o对象的m属性赋值。
定义对象o的方法m()之后,就可以用下面的方式来调用他:
o.m();
每个对象都继承原型对象的所有属性。一个对象的原型是由创建并初始化该对象的构造函数定义的。javascript中所有的函数都有prototype属性 ,他引用了一个对象。因为原型对象和构造函数关联在一起,所以类的每个成员都从原型对象继承了相同的属性。注意,继承是在查询一个属性值时自动发生的。我们在声明构造函数之后,才能引用原型,对象只继承那些在调用构造函数之前已经添加到原型上的东西。例如:
function MyObject(name,size){
this.name=name;
this.size=size;
}
MyObject.prototype.tellSize=function(){
alert(“size of”+this.name+” is ”+this.size);
}
var myObj=new MyObject(“tiddles”,”7.5米”);
myObj.tellSize();
我们可以使用原型机制来扩展内建类。例如:
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;
}
for/in语句。这个语句是有点特别的循环语句。他的语法如下:
for(variable in object) {
statement
}
variable应该是一个变量名,声明一个变量的var语句,数组的一个元素或者一个对象的一个属性,object是一个对象名,或者是一个计算结果为对象的表达式。statement是循环体。for/in循环的主题对object的每个属性执行一次。在循环体执行之前,对象的一个属性名会被作为字符串赋给变量variable。在循环体内部,你可以使用这个变量和“[]”运算符来查询该对象属性的值。
try/catch/finally语句是javascript的异常处理机制。该语句的try从句只定义异常需要被处理的代码块。catch从句跟随在try块后,他是在try块内的某个部分发生了异常时调用的语句块。finally块跟随在catch从句后,存放清除代码,无论try块中发生了什么,该代码块都会被执行。虽然catch块和finally块都是可选的,但是try块中至少应该有一个catch块或finally块。try、catch和finally块都以大括号开头和结尾。这是必须的语法部分,即使从句只有一条语句,也不能省略大括号。
接下来的代码说明了try/catch/finally语句的语法和目的。尤其要注意cath关键字后用括号括起来的标识符。该标识符就像函数的参数,他指定了一个仅存在于catch块内部的局部变量。javascript将把要抛出的异常对象或值赋给这个变量:
try {
//通常,该代码从代码块的顶部运行到底部没有任何问题,
//但有时他会抛出异常,
//既可以用throw语句直接抛出,也可以调用一个抛出异常的方法间接抛出,
}
catch(e){
//当且仅当try块抛出了异常,本块中的语句才会被执行
//这些语句使用局部变量e引用抛出的error对象或其他值。
//这个块可以以某种方式处理异常,或者什么都不做,
//忽略异常,或者用throw语句再抛出一个异常。
}
finally{
//无论try块中发生了什么,这个块中的代码都会被执行。
//try是否终止,他们都会被执行:
//1)正常地,在达到try块底部后
//2)由于break、continue或return语句终止
//3)抛出一个异常,由catch从句处理
//4)抛出一个异常,没有被捕捉,仍旧在传播
}
条件运算符(?:)是javascript中唯一的三元运算符(带有三个运算数)。他具有三个运算数,第一个位于?之前,第二个位于?和:之间,第三个位于:之后,可以用如下方式来使用他:
x>0?x*y:-x*y;