1、apply、call、bind
在JavaScript中,call、apply、bind都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部的this指向。
call和apply的区别: 作用完全一样,接收参数的方式不一样。
func.call(this, arg1, arg2); //call把参数顺序传递进去,参数数量明确时用call func.apply(this, [arg1, arg2]); //apply按数组的方式传递参数,参数不确定时用apply
当参数数量不确定时,函数内部也可以通过arguments来遍历所有的参数。
this是你想指定的上下文,他可以是任何一个JavaScript对像(一切JavaScript都是对像)。arguments是一个类数组对像,包含着传入函数中的所有参数,主要用途是保存函数参数。 callee属性是一个指针,指向拥有这个arguments对像的函数。arguments.callee()。
caller这个属性中保存着调用当前函数的函数的引用,如果在全局作用域中调用当前函数,它的值为null。arguments.callee.caller()
bind()方法与call和apply很相似,也是可以改变函数体内的this指向。
var foo = { bar : 1, eventBind: function(){ $('.someClass').on('click',function(event) { /* Act on the event */ console.log(this.bar); //1 }.bind(this)); } }