ES5 绑定 this 的方法
this
的动态切换,固然为 JavaScript 创造了巨大的灵活性,但也使得编程变得困难和模糊。有时,需要把this
固定下来,避免出现意想不到的情况。JavaScript 提供了call
、apply
、bind
这三个方法,来切换/固定this
的指向。
1 1、函数实例的call方法,可以指定函数内部this的指向(即函数执行时所在的作用域),然后在所指定的作用域中,调用该函数。 2 var obj = {}; 3 4 var f = function () { 5 return this; 6 }; 7 8 f() === window // true 9 f.call(obj) === obj // true 10 11 12 2、apply方法的作用与call方法类似,也是改变this指向,然后再调用该函数。唯一的区别就是,它接收一个数组作为函数执行时的参数,使用格式如下。 13 function f(x, y){ 14 console.log(x + y); 15 } 16 17 f.call(null, 1, 1) // 2 18 f.apply(null, [1, 1]) // 2 19 20 3、bind()方法用于将函数体内的this绑定到某个对象,然后返回一个新函数。 21 var counter = { 22 count: 0, 23 inc: function () { 24 this.count++; 25 } 26 }; 27 28 var func = counter.inc.bind(counter); 29 func(); 30 counter.count // 1