网上有很多介绍this,下面2个例子是引用阮一峰的
function test(){
this.x = 1;
alert(this.x);
}
test(); // 1
这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。
function test(){
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1
函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
自己想法
var foo = function(){console.log(this)}
var obj = {
method : function(){foo()},
method2: function(){console.log(this)},
method3: function(){function func(){foo();}func()},
method4: function(){var _self = this;function func(){_self.method2()} func()}
}
分别输出1. window 2.obj 3window 4.obj
1和2的区别是什么?1是在对象的method方法的环境下中的一个func中执行代码,而2是在method方法的直接环境下执行代码,
所以我的观点是,在对象方法的直接环境下执行代码会指向obj本身,在其他则指向window
var obj = {
method2: function(){
console.log(this)//----obj
function foo(){console.log(this)}//
foo() //----window
this.method3() // ----obj
},
method3:function(){console.log(this)}//代码是在对象的method3方法的直接环境下执行,所以也是指向obj
}
对象方法中只会影响直接环境下的this指向
所以在this混乱的情况下 写好 var _self = this 至关重要
举例: jq中回调函数的this......
以上仅个人见解,,有误,,请提出。。。。
网友评论