文章目录
- 前言
- 一、call()
- 二、apply()
- 三、bind()
- 总结
前言
JavaScript提供了一些函数方法帮助我们处理函数内部this的指向问题,常用的有call()、apply()、bind()三种方法
一、call()
可以进行函数的调用,它可以改变函数的this指向。
示例:
| function fn() { |
| console.log('fn'); |
| } |
| fn.call() |
复制
| var name = '全局的' |
| var obj_1 = { |
| name: 'obj_1', |
| getName: function (x, y, z) { |
| console.log(x, y, z); |
| console.log(this); |
| console.log(this.name); |
| } |
| } |
| |
| obj_1.getName.call() |
复制
| var obj_2 = { |
| name: 'obj_2' |
| } |
| obj_1.getName.call(obj_2) |
| obj_1.getName.call(null, 1, 2, 3) |
复制
改变this指向的时候会出现三种情况:
1.没有参数的时候,指向window
2.有一个参数的时候,指向当前参数
3.有多个参数,this指向第一个参数,剩下的参数是参数列表
二、apply()
可以进行函数的调用,它可以改变函数的this指向。
| function fn() { |
| console.log('fn'); |
| } |
| fn.apply() |
复制
| var name = '全局的' |
| var obj_1 = { |
| name: 'obj_1', |
| getName: function (x, y, z) { |
| console.log(x, y, z); |
| console.log(this); |
| console.log(this.name); |
| } |
| } |
| |
| obj_1.getName.apply() |
复制
| var obj_2 = { |
| name: 'obj_2' |
| } |
| obj_1.getName.apply(obj_2) |
| obj_1.getName.apply(null, [1, 2, 3]) |
复制
改变this指向的时候会出现三种情况:
1.没有参数的时候,指向window
2.有一个参数的时候,指向当前参数
3.有多个参数,this指向第一个参数,剩下的参数是数组
三、bind()
不可以进行函数的调用。
| function fn() { |
| console.log('fn'); |
| } |
| fn.bind() |
复制
| var name = '全局的' |
| var obj_1 = { |
| name: 'obj_1', |
| getName: function (x, y, z) { |
| console.log(x, y, z); |
| console.log(this); |
| console.log(this.name); |
| } |
| } |
| |
| obj_1.getName.apply() |
复制
| var obj_2 = { |
| name: 'obj_2' |
| } |
| obj_1.getName.apply(obj_2) |
| obj_1.getName.apply(null, [1, 2, 3]) |
复制
| var obj_3 = { |
| name: 'obj_3', |
| getName: function () { |
| console.log(this); |
| console.log(this.name); |
| }.bind(obj_2) |
| } |
| obj_3.getName() |
复制
改变this指向的时候会出现三种情况:
1.没有参数的时候,指向window
2.有一个参数的时候,指向当前参数
总结
以上就是今天的内容。