【问题标题】:Object or objectification?对象还是物化?
【发布时间】:2015-05-24 19:22:04
【问题描述】:

我试图理解 JavaScript 中的“对象”概念。在我看来,没有对象这样的东西,严格来说只有“对象化”。以下是 W3C 关于 JavaScript 对象可变性的解释:

"对象是可变的...如果y是一个对象,下面的语句将不会复制y...var x = y;对象x不是y的副本。它是y。两个x和 y 指向同一个对象。对 y 的任何更改也会更改 x,因为 x 和 y 是同一个对象。 http://www.w3schools.com/js/js_object_definition.asp

令我困惑的是:x 和 y 是对象,还是它们指向同一个对象?的解释是否意味着 x 和 y 可以说是同一个对象,因为它们指向同一个对象?我想知道这是否是 JavaScript 对象的定义,我将不胜感激。谢谢你。

【问题讨论】:

  • developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… 可以提供帮助。用 javascript 解释对象的好文章
  • 您要问的是传递是如何工作的,以及它是按引用传递还是按值传递。它总是按值传递,但对于对象,变量的值是一个引用,所以xy 都是对同一个对象的引用,改变一个也会改变另一个。
  • 仅供参考:W3C 和 w3schools 不是同一个组织。
  • 非常感谢所有的解释。文章很有帮助,没想到W3C和W3C School不是同一个组织。谢谢!

标签: javascript object


【解决方案1】:

在您的示例中,xy 在技术上是对内存中同一对象的引用。

当您创建一个对象,然后将该对象分配给不同的变量时,您所做的就是复制引用。

这个例子应该让你对发生了什么有所了解:

var a = {
    prop: 123
};

var b = a;

a.foo = "bar";

alert("b.prop: " + b.prop);
alert("b.foo: " + b.foo);

delete a.prop;

alert("b.prop after `delete a.prop`: " + b.prop);

也就是说,为了简单起见,像这样的变量被称为“对象”。
“将新属性添加到对象引用a”没有多大意义

【讨论】:

  • 我明白了。这就说得通了。谢谢。
【解决方案2】:

让我感到困惑的是:x 和 y 是对象,还是它们指向 到同一个对象?

xy 是变量,每个变量都包含对同一对象的引用。如果您熟悉像 C 这样的语言,那么您可以将对象引用视为指针。 xy 各自拥有一个指向同一个对象的指针,因此您可以通过 xy 中的指针修改该对象,或者您可以将相同的引用分配给另一个变量 z

对象本身与变量是分开的,对于对象,我认为最好将它们分开考虑。一个或多个变量可以指向对象。事实上,当不再有任何包含对该对象的引用的活动变量(该对象变得不可访问)时,该对象将被垃圾回收。

【讨论】:

  • 非常感谢您的明确解释。现在我看到了图片。它们是“分开的”。 “对象引用”是我需要的术语!谢谢!
【解决方案3】:

x 和 y 是对象吗?

取决于你问谁。该术语始终取决于使用它的上下文。从技术上讲,xy 是变量(或者,更准确地说,变量的名称或它们的“标识符”)。
一个对象总是匿名的——它没有名字。对象确实只有一个identity,以及绑定到它们的一组动态属性(键值对)。

但是当我们想要引用一个特定的对象时,我们通常会命名它。而不是说“变量x引用的对象”,我们只称它为“对象x”。

在您的具体示例中,两个变量都引用同一个对象,我们说x == y

【讨论】:

  • 这很有趣。我会记住这一点并尝试理解“上下文”。谢谢。
猜你喜欢
  • 2011-01-16
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多