javascript中的this指向谁

问题描述:

javascript中的this指向谁
function a(){obj1.b(this)}
然后调用obj.a()
b函数里面的this指向谁,是指向obj还是指向obj1,为什么,
1个回答 分类:综合 2014-10-17

问题解答:

我来补答
谁调用的a就指向谁,如果没写调用的对象,那么是windows.
obj.a();这时a里面在b后面括号里的this是obj.
如果直接调用a(),那么里面的this是windows(所有全局变量函数的对象)
再问: 可是obj1调用了b()呀,为什么不是他
再答: function b(o) { ...... this.doxxx(); // 这个this是obj1 } function a() { obj1.b(this); // 这个this是obj } obj.a = a; obj.a(); obj1.b(this),这句话里this作为实参,传入到b函数里,这时并不在b函数内,只有进入了这里: function b(o) { // 从这里开始 ...... // 到这里结束才是b的函数里。 } 所以这句话obj1.b(this)的this是在a的函数体内,所以就是调用a方法的对象。
再问: 1.function b(0)形参不是跟b函数声明的局部变量不是一个部分吗,为什么是属与a函数的? 2.String.prototype.html_encode=function(){return(this.replace(/&/,&))},如果有字符串调用该方法"123".html_encode();里面的this指向"123" function a(){“123”.html_encode()} obj.a()这时这个html_encode()函数里的this指向谁,是obj还是"123"
再答: 回答1:首先那个不是零0,是o(字母欧……)。obj1.b(this);这样调用的时候,this是实参,不在b的范围内,形参见下面 function b(obj) // 这个obj才是形参,形参可以当做是一个局部变量 { } 回答2:当然是123了,因为你用的"123".html_encode(),是对"123"调用的html_encode,所以在html_encode内,this就是"123"。 this写在哪个函数里就是哪个函数的this,function a(){ obj1.b(this);}这么写的时候this还是在a里面,并不是在b里面,传递参数是把变量赋值过去的。
 
 
展开全文阅读
剩余:2000