撰写此文源于最近在看Douglas Crockford的’JavaScript:The Good Parts’中文译本《Javascript语言精粹》时,发现一些自己不知道或者没有一下子理解的东西,拿出来细细研究并记录一下。
函数被作为很重要的一部分在书中做了详细的介绍和举例。感觉函数的四种调用方式和在不同调用方式上’this’绑定的不同是个重点也是难点。欢迎大家一起研究。
方法调用模式:
调用形式:通过’.'点表达式或[subscript]下标表达式调用一个对象中的方法。this 绑定:this被绑定到被调用方法所属的对象上。例子:
帮助
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24//创建myObject对象。它有一个value属性和一个increment方法。
//increment方法接收一个可选参数。如果参数不是数字,那么默认使用数字1。
var g='global';
var myObject={
value:0,
increment:function(inc){
document.writeln(this.g);
this.value+=typeof inc==='number'?inc:1;
//在方法被调用时this被绑定为myObject对象。
}
};
document.writeln(this.g);//global
//打印出全局变量g的值,说明this被绑定在全局对象上。
myObject.increment();
//在这里increment方法才被调用,this才被绑定到myObject对象,
这是特有“超级”迟绑定(very late binding)。
//这时打印出的this.g为undefined,因为myObject中没有g这个属性,
可以看出这时this被绑定到了myObject对象上。
document.writeln(myObject.value);//1