this是JavaScript中的关键字,指向调用函数的对象。下面分几种场景分析。
全局函数内
function test(){
alert(this);
}
this指向的是window对象,所以在这个方法内可以直接访问到所有的全局变量。
js对象内
var obj = {};
obj.fun = function(){
alert(this);
};
this指向的是obj对象
构造函数内
function test(){
alert(this);
}
var obj = new test();
this指向obj对象
apply,call,bind
apply和call都是改变函数体内部this的指向。第一个参数都是this指向的对象,传空就是window对象,第二个开始参数只是格式不同。
bind也可以改变函数体内this指针。调用bind方法会生成一个新的函数。
当你希望改变上下文环境之后并非立即执行,而是回调执行的时候,使用 bind() 方法。而 apply/call 则会立即执行函数。
其他方式
前面提到用bind等方式修改函数体内的this指向,ES6的语法提供了两种方式可以达到同样的效果
=> 箭头函数
箭头函数没有它们自己的 this,箭头函数中的 this 值始终来自闭包所在的作用域。
:: 绑定操作符
::操作符会将左值和右值(一个函数)进行绑定,从而可以达到修改方法调用者同时也是this值的效果。
网友评论