语法
func.bind(thisArg[, arg1[, arg2[, ...]]]),返回值:返回由指定的this值和初始化参数改造的原函数拷贝;func.call(thisArg[, arg1[, arg2[, ...]]]),返回值:无返回值;func.apply(thisArg[, argsArray]),返回值:无返回值;
相同点
改变 this 指向,改变函数的 arguments
不同点
1. bind() 方法创建一个新的函数;call() 和 apply() 方法调用一个函数
说明:
func.bind(thisArg) 后,函数 func 不会立即执行,要想执行需要 func.bind(thisArg)();func.call(thisArg)、func.apply(thisArg) 函数 func 会立即执行。
1 | var name = 'window'; |
2. bind() 和 call() 方法接受的是若干个参数的列表,而 apply() 方法接受的是一个包含多个参数的数组
说明:
apply 方法如果要传入第二个参数,则第二个参数必须未数组,否则会报错。
1 | object = {}; |
其他
- bind 是 ES5 方法,不兼容 IE8 及其以下;
- ES5 以后, apply 第二个参数也可以接受类数组对象(如:
{'length': 2, '0': 'eat', '1': 'bananas'});