对于下面的代码段什么时候评估“this”?
a.b = function c(){
return function e(){
return this;
};
};
d = a.b();
什么将d的值()是什么?这可能不是一个很好的例子,但我只是对“this”会引用什么感到困惑。
感谢,
对于下面的代码段什么时候评估“this”?
a.b = function c(){
return function e(){
return this;
};
};
d = a.b();
什么将d的值()是什么?这可能不是一个很好的例子,但我只是对“this”会引用什么感到困惑。
感谢,
眼见为d将现在等于一个功能“这”将被计算到任何函数调用它。它尚未实际评估过。
在执行结束时,d='function e() { return this; }'
,所以您执行d()
的那一刻是this
将被评估。
但是在这种情况下''this'将在'd()'被调用时被评估为'window'。 – bfavaretto
确切地说,当'd()'最终被评估,但你是对的。之所以如此,是因为不是对象的子对象的所有东西都是窗口的子对象,所以将'd()'想象为'window.d()',因此它指向窗口。 – DanRedux
这通常是一个功能
$('.image').each(function(index){
alert($(this).attr('href'));
}
我的来电者认为ab()将返回一个
请参阅http://remysharp.com/2007/04/12/jquerys-this-demystified/
假设d()
在您的代码段d()
的最后一行将返回全局对象window
后立即被调用(如果您在浏览器中)。
但是两者都是正确的:
d.call(a) === a;
d.call(a.b.prototype) === a.b.prototype;
这是说,this
是由什么传递作为第一个参数call
定义。
从你的代码d不同于“this”。 d将是一个函数E,因为你设置d是函数调用AB()返回一个函数的返回值,所以
d = function e(){
return this;
}
现在的this
值取决于你如何调用这个函数d 。当调用此函数时,将评估this
。如果你只是称之为d()
this
将是全球Window
对象。
,并让说,如果我有
obj ={foo:1, bar:2};
和我这样调用
d.call(obj)
this
将obj对象。 call()方法用于在任何对象上调用函数,传递的对象在该函数内的行为如this
。
我知道Javascript这真的很让人困惑,并且不容易让你的头在附近。 可能是这可以帮助http://devlicio.us/blogs/sergio_pereira/archive/2009/02/09/javascript-5-ways-to-call-a-function.aspx
this
是对调用方法的对象的引用。 (如果没有with
指令)
您可以尝试做console.log(this);函数内部 –
我的投票将是“执行时间”。 – aroth
这个问题几乎被问及如何用正则表达式解析HTML(lol)。 http://stackoverflow.com/questions/3320677/this-operator-in-javascript – Marty