更改this指向
除了遵循默认的this指向规则,函数的调用者还可以利用JavaScript提供的两种方式手动控制this的指向。一种是通过的apply()方法,另一种是通过call()方法。具体示例如下。
1 function method() {
2 console.log(this.name);
3 }
4 method.apply({ name: '张三' }); // 输出结果:张三
5 method.call({ name: '李四' }); // 输出结果:李四
通过上述示例可以看出,apply()和call()方法都可以更改函数内的this指向,它们的第1个参数用来传入一个对象,然后在method()方法中通过this访问到的就是这个对象。因此,method()函数中通过this.name即可访问到传入对象的name属性。
apply()和call()方法的区别在于第2个参数。apply()的第2个参数表示调用函数时传入的参数,通过数组的形式传递;而call()则使用第2~N个参数来表示调用函数时传入的函数。下面我们通过代码进行演示。
1 function method(a, b) {
2 console.log(a + b);
3 }
4 method.apply({}, ['1', '2']); // 数组方式传参,输出结果:12
5 method.call({}, '3', '4'); // 参数方式传参,输出结果:34