标签:
新手:在看Javascript高级程序设计时看到 每个函数都包含两个非继承而来的方法:apply()和call()。在ECMAScript5中还添加了一个方法bind()。
apply()方法与call()方法的作用其实是相同的,他们的区别在于接收参数的方式不同。对于call()方法要求参数都是直接传递给函数,而如果打算直接传入arguments对象或者包含函数中接收到的也是一个数组,那么使用apply()。
window.color = "red";
var o = { color : "blue"};
function sayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(o) //blue
此例子的sayColor是在全局作用域中调用的,所以this.color会转换成对window.color的求值。而sayColor.call(o)中,this指向o对象所以结果为"blue"。
在网上看到的function add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a-b);
}
add.call(sub,3,1);
这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
应该是对象sub调用了对象add的方法。
标签:
原文地址:http://www.cnblogs.com/jyasq/p/5664065.html