JavaScript'这'混乱

时间:2012-02-13 16:11:45

标签: 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];

这将导致Uncaught TypeError: Cannot read property 'A' of undefined错误。 当我使用myObj.src.A[0]代替this时,它工作正常。

在这种情况下使用它的正确方法是什么?

5 个答案:

答案 0 :(得分:3)

this指的是执行代码的对象上下文。因此,如果对象具有方法aMethod,则aMethod this内部会引用拥有该对象的对象。

我假设您的代码在全局命名空间中运行,因此this未定义。真的,你只想要myObj.A.src = myObj.src.a[0];

http://www.quirksmode.org/js/this.html

答案 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)

JavaScript中的

this在很大程度上取决于调用函数的上下文。如果您的代码(因为它看起来在上面)只是挂在页面中的脚本标记中,那么this将成为“全局”上下文 - 在浏览器中是{{1}对象。

通常,window指的是函数所属的对象/作用域,但是由于函数是可以分配给不同对象并在其中调用的第一类值,因此会发生许多特殊(且有用)的情况。各种情况。

其他人写的一些冗长的阐述可能会有所帮助:

一开始看起来有点棘手,特别是如果你已经习惯了this 总是一件事的语言,但是在你学会了一些规则之后它变得公平直截了当,实际上非常有用。

答案 4 :(得分:-1)

myObj.src.A[0]在此上下文中是正确的,因为this引用其直接父级。