0

这可能很容易,但我很困惑,所以也许今天我还能学到更多。我正在尝试执行以下操作:

var myObj={};myObj.src={}我的对象.src。A=['1.png'、'2.png'和'3.png'];myObj.A=新图像();myObj.A.src=this.src。A[0];

这将导致Uncaught TypeError:无法读取未定义的属性“A”错误。当我使用我的对象.src。答[0]而不是它工作得很好。

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

4
  • “在这种情况下,正确的使用方法是什么?”你应该告诉我们你的背景是什么。。。 评论 2012年2月13日16:13
  • 2
    你期望什么参考,为什么?从你发布的代码中,我可以告诉你一件事不会be是“myObj”。
    – 波蒂
    评论 2012年2月13日16:13
  • 你为什么认为应参考我的对象? 你应该阅读developer.mozilla.org/en/JavaScript/Reference/Operators/this。从你发布的代码来看,你似乎不需要使用完全。 评论 2012年2月13日16:14
  • @FelixKling说得有点对:)现在明白了,我想我可以像在myObj.f=函数(){this.g=55;}
    – 90米
    评论 2012年2月13日16:23

5个答案5

重置为默认值

指执行代码的对象上下文。所以如果一个对象有一个方法a方法,然后在里面a方法 引用拥有它的对象。

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

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

1

这个关键字总是不同的,这取决于所涉及的范围。在上面发布的代码片段中,假设您只是将其放在文档的头部某处,指的是页面本身。因此,很明显,在这一点上这个src。A类将是未定义的。如果您要将事件应用于代理,例如:

myObj.click=函数(){警报(this.src.A[0]);}

这个关键字接收一个属于委托所有者的新作用域(在本例中为myObj)。只要明确定义范围和范围边界,就很容易跟踪。

1

不是指变量myObj在代码的情况下。很可能,如果您不在函数或对象方法的范围内,那么是指DOM窗口它没有属性源代码。A类

1

在JavaScript中,函数的调用严重依赖于上下文。如果您的代码(如上图所示)只是挂在页面中的脚本标记中,那么将是“全局”上下文--在浏览器中是窗口对象。

一般来说,指的是函数所属的对象/范围,但由于函数是可以分配给不同对象并在不同上下文中调用的第一类值,因此会出现许多特殊(有用)情况。

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

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

-1

我的对象.src。答[0]在这种情况下是正确的,因为引用其直系父级。

  • 2
    引用其直系父级…谁的父母?“函数上下文”和局部变量之间没有这种关系。 评论 2012年2月13日16:16
  • 的父级。这是相对的
    – 唐尼
    评论 2012年2月13日16:18
  • 啊,我刚刚意识到你为什么会对此感到困惑。对一个非常简单的概念的可怕解释,甚至与我的意图都不接近。我的错。无视。
    – 唐尼
    评论 2012年2月13日18:00

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.