this所指向的对象是由this所在的执行域决定的,而不是由this所在的定义域决定
对象的方法调用,this指向当前对象:obj.fn()、ojb['fn']()。 //.fn()、['fn']前的对象
var name = "this=window"; var o = { name: "this=o", f: function(){ return this; } }; var o1 ={ name: "this=o1", f: o.f } var a = o1.f(); console.log(a.name);//this=o1 var o2 = { name:"this=o2", f:function(){ return o.f; } }; var b=o2.f()(); console.log(b.name);//window
a1.f(),a1的方法,所以this指向a1
o2.f()(),分开看,o2.f()返回的是o.f,o.f这里并没有执行,是一个函数。o2.f()(),函数自执行,this指向window
function f(){ return this; }; var p = { name:"对象p", me:f, p1:{ name:"对象p1", me:f, p2:{ name:'对象p2', me:f } } }; var who = p.p1.p2.me(); console.log(who.name);//对象p2 who = p.p1.me(); console.log(who.name);//对象p1 who = p.me(); console.log(who.name);//对象p这里的都是调用方法,方法由谁调用,this指向谁()
第一个me()调用前是p2,第二个是p1,第三个是p,分别对应p2,p1,p。