这可能很简单,但我很困惑,所以也许我今天可能还会学到更多东西。我正在尝试执行以下操作:
var myObj = {};
myObj.src = {}
myObj.src.A = ['1.png','2.png','3.png'];
myObj.A = new Image();
myObj.A.src = this.src.A[0];
这将导致Uncaught TypeError: Cannot read property 'A' of undefined
错误。
当我使用myObj.src.A[0]
代替this
时,它工作正常。
在这种情况下使用它的正确方法是什么?
答案 0 :(得分:3)
this
指的是执行代码的对象上下文。因此,如果对象具有方法aMethod
,则aMethod
this
内部会引用拥有该对象的对象。
我假设您的代码在全局命名空间中运行,因此this
未定义。真的,你只想要myObj.A.src = myObj.src.a[0];
。
答案 1 :(得分:1)
this
未引用var myObj
。如果您不在函数或对象方法的范围内,那么this
可能指的是没有属性的DOM window src.A
答案 2 :(得分:1)
this
关键字总是不同,具体取决于所涉及的范围。在上面发布的代码段中,假设您只是将其放在文档中的某个位置,this
指的是页面本身。所以,在这一点上相当明显this.src.A
将是未定义的。如果您要使用代理人员向其申请活动,例如:
myObj.click = function() {
alert(this.src.A[0]);
}
this
关键字接收属于委托所有者的新范围(在本例中为myObj)。只要您明确定义范围和范围边界,this
就很容易跟踪。
答案 3 :(得分:1)
this
在很大程度上取决于调用函数的上下文。如果您的代码(因为它看起来在上面)只是挂在页面中的脚本标记中,那么this
将成为“全局”上下文 - 在浏览器中是{{1}对象。
通常,window
指的是函数所属的对象/作用域,但是由于函数是可以分配给不同对象并在其中调用的第一类值,因此会发生许多特殊(且有用)的情况。各种情况。
其他人写的一些冗长的阐述可能会有所帮助:
一开始看起来有点棘手,特别是如果你已经习惯了this
总是一件事的语言,但是在你学会了一些规则之后它变得公平直截了当,实际上非常有用。
答案 4 :(得分:-1)
myObj.src.A[0]
在此上下文中是正确的,因为this
引用其直接父级。