JavaScript';这';混乱

JavaScript';这';混乱,javascript,object,this,Javascript,Object,This,这可能很容易,但我很困惑,所以也许今天我还能学到更多。我正在努力做到以下几点: var myObj = {}; myObj.src = {} myObj.src.A = ['1.png','2.png','3.png']; myObj.A = new Image(); myObj.A.src = this.src.A[0]; 这将导致未捕获类型错误:无法读取未定义的属性“A”错误。 当我使用myObj.src.A[0]而不是this时,它工作正常 在此上下文中使用此选项的正确方法是什么?此指代

这可能很容易,但我很困惑,所以也许今天我还能学到更多。我正在努力做到以下几点:

var myObj = {};
myObj.src = {}
myObj.src.A = ['1.png','2.png','3.png'];
myObj.A = new Image();
myObj.A.src = this.src.A[0];
这将导致
未捕获类型错误:无法读取未定义的属性“A”错误。
当我使用
myObj.src.A[0]
而不是
this
时,它工作正常


在此上下文中使用此选项的正确方法是什么?

指代码正在其中执行的对象上下文。因此,如果一个对象有一个方法
aMethod
,那么在
aMethod
中,这个
引用拥有它的对象

我假设您的代码在全局名称空间中运行,因此
这个
是未定义的。实际上,您只需要
myObj.A.src=myObj.src.A[0]


指执行代码的对象上下文。因此,如果一个对象有一个方法
aMethod
,那么在
aMethod
中,这个
引用拥有它的对象

我假设您的代码在全局名称空间中运行,因此
这个
是未定义的。实际上,您只需要
myObj.A.src=myObj.src.A[0]


myObj.src.A[0]
在这种情况下是正确的,因为
这个
引用了它的直接父对象。

myObj.src.A[0]
在这种情况下是正确的,因为
这个
引用了它的直接父对象。

在您的代码中,这个
没有引用
var myObj
。很可能,如果您不在函数或对象方法的范围内,则
指的是没有属性
src的。对于您的代码,a
不指的是
var myObj
。很可能,如果您不在函数或对象方法的范围内,则
指的是没有属性
src的。a

关键字总是根据涉及的范围而不同。在上面发布的代码片段中,假设您只是将其放在文档头部的某个位置,
this
指的是页面本身。因此,很明显,
this.src.A
将是未定义的。如果您要通过委托将事件应用到它,例如:

myObj.click = function() {
    alert(this.src.A[0]);
}

this
关键字接收属于委托所有者的新范围(在本例中为myObj)<代码>此
非常容易跟踪,只要您清楚地定义了范围和范围边界。

关键字总是根据涉及的范围而不同。在上面发布的代码片段中,假设您只是将其放在文档头部的某个位置,
this
指的是页面本身。因此,很明显,
this.src.A
将是未定义的。如果您要通过委托将事件应用到它,例如:

myObj.click = function() {
    alert(this.src.A[0]);
}

this
关键字接收属于委托所有者的新范围(在本例中为myObj)<代码>只要您清楚地定义了范围和范围边界,这个
就很容易跟踪。

在JavaScript中,这个
很大程度上取决于调用函数的上下文。如果您的代码(如上所示)只是挂在页面中的脚本标记中,那么
将成为“全局”上下文—在浏览器中是
窗口
对象

通常,
指函数所属的对象/范围,但也有一些特殊(且有用)情况发生,因为函数是可以分配给不同对象并在不同上下文中调用的第一类值

其他人编写的一些冗长的详细说明可能会有所帮助:


这在一开始似乎有点棘手,特别是如果你习惯了
这个
始终是一回事的语言,但是在你学习了一些规则之后,它变得相当简单,实际上非常有用

这在JavaScript中很大程度上取决于调用函数的上下文。如果您的代码(如上所示)只是挂在页面中的脚本标记中,那么
将成为“全局”上下文—在浏览器中是
窗口
对象

通常,
指函数所属的对象/范围,但也有一些特殊(且有用)情况发生,因为函数是可以分配给不同对象并在不同上下文中调用的第一类值

其他人编写的一些冗长的详细说明可能会有所帮助:


这在一开始似乎有点棘手,特别是如果你习惯了
这个
始终是一回事的语言,但是在你学习了一些规则之后,它变得相当简单,实际上非常有用

“在此上下文中使用此项的正确方式是什么?”您应该向我们展示您的上下文……您希望
引用什么,以及为什么?从你发布的代码中,我可以告诉你,它不会是“myObj”。你为什么认为
this
应该指
myObj
?你应该读书。从你发布的代码来看,你根本不需要使用
这个
。@FelixKling有点像真的:)现在得到了它,我不知何故认为我可以像在
myObj.f=function(){this.g=55;}
“在这种情况下使用它的正确方法是什么?”您应该告诉我们您的上下文是什么……您希望
引用什么,为什么?从你发布的代码中,我可以告诉你,它不会是“myObj”。你为什么认为
this
应该指
myObj
?哟