#Call Apply 和 Bind小结
###1.Call()
call()方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法.
fun.call(thisArg[, arg1[, arg2[, ...]]])
该方法接受的第一个参数为指定的替换对象,在非严格模式下若值为null或undefined,则会默认指向全局对象window.后面接受一连串的值作为参数,不能使数组或其他对象.
call()的调用即在调用thisArg对象时,可以调用fun的属性和方法.
#####示例代码
function product(name, price) {
var pName = name;
var pPrice = price;
return pName+’的价格是’+pPrice+’元/斤’;
}
function food(name, price) {
}
var apple = product.call(food,'apple',3.5);
console.log(apple()); #"apple的价格是3.5元/斤"
一般使用call方法可以用来调用父构造函数、调用匿名函数、指定上下文的this指向.
详细内容参考MDN的call()部分.
###Apply()
apply方法的作用和call方法作用一样,接受的第一个参数一样,后一个参数以数组或类数组对象的形式添加.
fun.apply(thisArg[, argsArray])
详细内容参考MDN的apply()部分.
###Bind()
bind()方法会创建一个新函数,当这个新函数被调用时,它的this值是传递给bind()的第一个参数, 它的参数是bind()的其他参数和其原本的参数.
fun.bind(thisArg[, arg1[, arg2[, ...]]])
#####参考代码
this.x = 9;
var module = {
x: 81,
getX: function() { return this.x; }
};
module.getX(); // 81
var retrieveX = module.getX;
retrieveX(); // 9
var boundGetX = retrieveX.bind(module);
boundGetX(); // 81
即创建一个新的函数boundGetX,当调用该函数时this指向的是module对象,则this.x值为81.
详细内容参考MDN的bind()部分.