call、apply、bind 异同
- 由于**call()、apply()与 bind()**都是属于 Function.prototype 对象下的方法,所以每个 function 实例都拥有有 call、apply 与 bind 属性。
- 相同点:都是为改变 this 指向而存在的。
- 异同点:使用 call()方法时,传递给函数的参数必须逐个列举出来,使用 apply()方法时,传递给函数的是参数数组。bind()和 call()很相似,第一个参数是 this 的指向,从第二个参数开始是接收的参数列表。bind()方法不会立即执行,而是返回一个改变了上下文 this 后的函数,用于稍后调用。 call()、apply()则是立即调用。
这里的 this 指向 window 对象
1 | funciton foo () { |
这里的 this 指向调用者,谁调用 this 就指向谁
1 | var name = "王小二" |
使用 call()、apply()、bind()改变 this 的上下文:
1 | let name = "张小二" |