javascript:这个关键字
我知道javascript:这个关键字,javascript,Javascript,我知道这个指向当前对象,函数在该对象上运行。这是根据定义的代码 function foo(){ alert(this); //output==window } 所以,现在函数foo等于window.foo() 但是现在在这里 function foo(){ function fo(){ alert(this); } fo(); } 那么,现在当执行foo时,输出又是窗口对象了,为什么?因为嵌套的这个应该引用不同的对象。因为fo()现在不是作为f
这个
指向当前对象,函数在该对象上运行。这是根据定义的代码
function foo(){
alert(this); //output==window
}
所以,现在函数foo等于window.foo()
但是现在在这里
function foo(){
function fo(){
alert(this);
}
fo();
}
那么,现在当执行foo
时,输出又是窗口对象了,为什么?因为嵌套的这个应该引用不同的对象。因为fo()现在不是作为foo()==window.foo()在窗口对象上操作。所以嵌套的函数现在应该指向不同的对象
有关详细信息,请参见此处:
function foo()
{
alert(this);
function fo(){alert(this);}
as();
}
如果现在,var x=newfoo();而foo()方法中的“this”指向object object,但嵌套this指向global object,对吗?现在你应该清楚我的意思了,编程,你做错了
要使fo成为对象的函数,应执行以下操作:
function foo(){
this.fo = function(){
alert(this);
}
}
f = new foo();
f.fo();
查看如何在对象声明中启动fo函数
现在,当您执行f.fo()
时,您会得到[object object]
此值取决于函数的调用方式,而不是定义方式。如果您具有以下功能:
var test = function() {
console.log(this);
};
那么有很多种方式来称呼它:
test()
-它将是窗口
newtest()
-它将是一个实例
({foo:test}).foo()
-它将是对象
test.call(bar)
-它将是bar
函数是否嵌套并不重要。如前所述,关键字this
在调用时动态绑定到位于“.”左侧的对象。
上述情况有三个例外
当没有
时,关键字将绑定到全局对象窗口
当您使用call和apply时,您可以决定此
绑定到什么
使用关键字new从构造函数创建新实例时,关键字this
引用新生成的实例
从这里开始,您仍然只调用fo()
,这个
绑定到窗口
两件事
首先,您应该了解如何使用控制台。(console.log(this);
)
第二,闭包和作用域之间存在差异(this
)
关闭:
function a() {
function b() {
// b is only available inside `a`
}
}
// so out here b will be undefined
范围:
function a() {
// in here the scope can be multiply things depending on how the function is called. See below
console.log(this);
}
范围是每个默认的窗口
,如果函数是对象的方法,则范围指对象
a(); // logs: window
var o = {
a: a
};
o.a(); // logs: { a: a }
您可以使用以太调用或应用来覆盖此删除行为
var s = [1, 2, 3]
a.call(s); // logs: [1, 2, 3]
// or using apply
a.apply(s) // logs: [1, 2, 3]
你期望它等于什么?你仍然在运行fo()
所以this==window
@pimvdb不,它不是在运行。它是一个嵌套函数,怎么能运行得这么简单呢?oo现在我必须详细解释你仔细看这段代码。function foo(){function(){alert(this);}}现在,当x=new foo()时,“this”在方法中指向全局对象,因为它是嵌套的,对吗?@MaizerePathak,我知道,但基本上是一样的。我只是想向你解释一下事情是如何运作的。@NULL无论如何,谢谢你的帖子。但这并不是我想要的。第一段代码通常被称为“范围”。此
值通常称为“上下文”。快速回答:)关于全局范围,由于执行上下文具有受限权限,有时它不会是窗口
对象。例如,如果该函数是从Web Worker中调用的,这里将详细介绍