在JavaScript中,this对象是在运行时基于函数的执行环境决定的。this总是指的是调用函数的那个对象
1.一般的函数调用
下面这个例子在全局环境中调用函数,因此this指向全局对象Global。
function f1(){
alert(this);
}
f1()//alert提示:[object Window]
2.在闭包中使用this
在闭包中使用this,此时this仍指的是全局对象,因此下面例子会输出1
let a = 1;
function f1() {
let a = 0;
return function () {
return this.a;
}
}
console.log(f1()());//1(非严格模式下输出1,否则会输出undefined);
每个函数在被调用时都会自动取得两个变量:this和arguments。内部函数在搜索这两个变量时,只会搜索到其活动变量为止。因此永远不可能反问到外部函数的变量。
3.使用call()和apply()函数改变this的指向
call和apply实际上是为了动态改变this而出现的,当一个对象中没有某个方法,而其他对象中有,我们就可以借助call和apply用其他对象的方法来操作。
var obj1 = {
a : "knife",
tools : function() {
console.log("I use "+this.a);
}
};
var obj2 = {
a : "bow"
};
obj1.tools();//I use knife
obj1.tools.call(obj2);//I use bow
emmmmm
暂时就这么多。
网友评论