apply是函数的一种调用模式。
函数调用模式有4种:方法调用模式、函数调用模式、构造器调用模式、apply调用模式。
call是apply调用模式的一种改变,可以认为是aplly调用模式的语法糖。
function foo(age,id) {
console.log("name is: "+this.name+" and age is: "+this.age+" and id is:"+id);
}
var name = "window name";
var objtest = {
name:"objName",
age:18
}
foo(18,3308);
foo.apply(objtest,[19,3308]);
foo.apply(null,[19,3308]);
foo.apply([19,3308]);
foo.call(objtest,25,3308);

apply调用模式的作用是在函数调用时改变函数的执行上下文,objtest对象上没有打印方法,而通过window对象中的foo方法的apply调用实现了打印。
apply方法第一个参数设定对象后就改变了this的指向,实现的方法共用。
bind() 方法和前两者不同在于: bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。所以说bind方法是创建新函数。他的参数和call()相同。


参考:
http://www.hubwiz.com/exchange/56c83214aaab5f097e78a17b
https://www.cnblogs.com/ly0612/p/6821124.html
网友评论