call()、apply()和bind()方法的作用
call()、apply()和bind()三者都可以改变this指向 (即函数执行时所在的作用域)
若想在某个对象上强制调用函数,可以使用函数的call(..)和app(..)方法( JavaScript 提供的绝大多数函数以及你自己创建的所有函数都可以使用 call(..) 和 apply(..) 方法。)
call()、apply()可以调用函数,同时也会立即执行该函数。从 this 绑定的角度来说,call(..) 和 apply(..) 是一样的。call()、apply()第一个参数是必须的,可以是null,undefined,this,但是不能为空,设置为null,undefined,this表明函数此时处于全局作用域。它们的区别体现在其他的参数上,即call()接受的是一个参数列表,而apply()方法接受的是一个包含多个参数的数组。
如下例
function foo() {
console.log( this.a );
}
var obj = { a:2 };
foo.call( obj ); // 2
bind(..) 会返回一个硬编码的新函数,它会把参数设置为 this 的上下文并调用原始函数。bind方法并非立即执行一个函数。 传递参数的形式与call()方法相同