一位面试官要求我解释以下代码中这代表什么。我对此一无所知。因为我以前没有见过这样的代码。请告诉我这两者之间有什么区别,这些代码在什么情况下有用?
function A(){
this.x=1;//No.1
function B(){
this.y=2;//No.2
}
}
我只知道当我使用new创建一个新对象时,它的属性x等于1;
一位面试官要求我解释以下代码中这代表什么。我对此一无所知。因为我以前没有见过这样的代码。请告诉我这两者之间有什么区别,这些代码在什么情况下有用?
function A(){
this.x=1;//No.1
function B(){
this.y=2;//No.2
}
}
我只知道当我使用new创建一个新对象时,它的属性x等于1;
这取决于您如何调用该函数。如果您将其作为常规函数调用,如下所示:
A();
然后this
将是window
文档的对象。
如果将函数用作对象构造函数,如下所示:
var a = new A();
thenthis
将是对新创建对象的引用。
this
函数中的引用B
永远不会是任何东西,因为不可能调用该函数。A
它在函数内部是本地的,并且由于A
函数中没有可用于调用B
函数的代码,因此永远不会调用它。
如果我们可以调用该B
函数,则与该A
函数相同。什么this
取决于您如何使用该功能。即使您在函数用作构造函数(因此是 中的对象引用)时B
从函数内部调用该函数,该函数也不会继承自. 它要么是对(何时用作函数)的引用,要么是对新创建对象的引用(如果用作构造函数)。A
A
this
A
B
this
A
window
B
B
如果 this 在正常window
上下文中使用,则两者都this
引用窗口,即使命名范围不同。
这是您发布的代码的调整版本:
function A(){
this.x=1;//No.1
function B(){
this.y=2;//No.2
console.log(this) // log `this`
}
console.log(this) // log `this`
B() // Run function B()
}
A() // Run function A()
这会将每个记录this
在控制台中。它返回
window
window
如果您从不同的上下文(例如分配为事件处理程序)调用 A(),this //No.1
将引用相关对象。this //No. 2
仍然会window
。
This.x 和 This.y 指的是窗口。但是您不能访问函数 B。它会显示错误,例如 B() 未定义。在萤火虫控制台模式下查看