javascript 中 this 的含义
javascript 编程中,经常使用 this ,那么 this 到底代表哪个对象呢?
首先我们看看 this 使用的意义,使用 this 可以传递上下文对象,避免在定义中将参数实际名称写入,更可以避免在传递过程中造成混乱,所有使用 this 是非常有效的方法。
那么还是让我们看看,this 到底代表哪个对象吧。分以下四种情况:
1、默认状态代表 window对象,如:
function test() { console.log(this.val); } var val=10; fn();
输出结果:10
显然使用了全局变量,所有 this 代表的对象为 window
2、通过一个对象调用该函数,则 this 代表最后调用它的对象,如:
function test() { console.log(this.val); } var testobj = { val:10; fun:test; } testobj.fun();
输出结果:10
this 此时代表 testobj 对象,这是引用该函数的对象。
再如
function test() { console.log(this.val); } var testobj = { val:10; obj:otherobj; } var otherobj = { val:20; fun:test; } testobj.obj.fun();
输出结果:20
因为 otherobj 是最后调用函数的对象,所以 this 代表 otherobj。
这里需要注意的一点是,如果使用变量将函数传递给变量,则上下文对象无效,如
function test () { console.log(this.val); } var val=5; var testobj = { val:10; fun:test; } var varfun=testobj.fun; varfun();
输出结果:5
由于定义了变量 varfun = testobj.fun 将函数传递给了变量,testobj 就不再是上下文对象了,this 则代表window对象
所以使用的是全局变量。
3、使用bind()、apply()、call()调用时,this代表传入的第一个参数
function test() { console.log(this.val); } var testobj = { val:10; } test.call(testobj);
输出结果:10
如果传入的第一个参数为 null ,则 this 依然代表 window 对象。
function test() { console.log(this.val); } var testobj = { val:10; } var val:20; test.call(null);
输出结果:20
4、如果函数是一个构造函数,用new创建对象时,this则代表新创建的对象
function test(val) { this.val=val; } var varfun=new test(5); console.log(varfun.val);
输出结果:5