Javascript 变量作为对象指针

Posted

技术标签:

【中文标题】Javascript 变量作为对象指针【英文标题】:Javascript Variables as Object Pointers 【发布时间】:2013-07-26 04:33:45 【问题描述】:

出于好奇,我有一个问题。所以我研究了 JS 如何处理变量赋值,我明白了。 How does variable assignment work in javascript?

但在我正在处理的以下代码中似乎没有表现出相同的原则:

var temp = playlist1[0];
playlist1[0] = playlist1[1];
playlist1[1] = temp;

我知道这是交换数组元素的标准方法。但是如果 temp 指向playlist1[0],而playlist1[0] 的内容更改为playlist1[1] 的内容,那我怎么没有连续两个playlist1[1] 值呢?

【问题讨论】:

How does variable assignment work in JavaScript?的可能重复 我将其投票为重复,因为您链接的问题中的答案就是您问题的答案。 @EvanTrimboli 我认为这个问题是公平的,因为它要求对现有问题进行进一步澄清。另一个问题很老,可能不再受到监控。 旧与否,答案都是一样的。 OP 辩称,他提出这个问题是为了进一步理解该主题。经过初步解释(不是来自“已经知道”的地方),链接的问题没有清楚地回答问题。在最终解释后(来自“已经知道”的地方),OP 会看到链接的问题如何提供帮助;作为参考文本而不是学习文本。但是 OP 坚持认为这个问题增加了链接问题的价值并加深了学习,以避免可能将变量误解为对象指针概念。 【参考方案1】:

不仅变量是对象指针。 所有值(不是原始值)都是对象指针。所以temp 是一个对象指针。 playlist1 是一个指向数组对象的对象指针,该数组对象的元素是对象指针。例如playlist1[0] 是对象指针,playlist1[1] 是对象指针等

但如果 temp 指向 playlist1[0]

这没有意义。 temp 是一个对象指针。它指向一个对象。 playlist1[0] 不是对象;它是一个对象指针。 temp = playlist1[0]; 使对象指针temp 指向与对象指针playlist1[0] 相同的对象。

如果你懂C,就相当于这样:

Object *playlist1[10];

Object *temp = playlist1[0];
playlist1[0] = playlist1[1];
playlist1[1] = temp;

【讨论】:

OP 的要点:数组元素不是对象,它们也是指向对象的指针。这回答了我的问题,加深了我对机制的理解。【参考方案2】:

这与引用问题中的答案一致: 您只是在更改变量指向的对象 - 而不是它曾经指向的数据。这意味着 temp 不受将 playlist1[1] 指向 playlist1[2] 的移动的影响。当 playlis1[1] 和 temp 都指向它时,Temp 保留它指向的原始值。仅更新播放列表 1[1]

【讨论】:

【参考方案3】:

因为这些仍然是对数组中元素的引用,而不是元素本身。所以在这一行:

playlist[1]=playlist[2]

你没有改变任何关于 temp 的东西。与类似的东西(假设数组元素是对象)进行对比:

playlist[1].x=playlist[2].x

这实际上是给数组中的对象赋值,如果temp指向playlist[1],那么temp.x就等于playlist[2].x

【讨论】:

【参考方案4】:

假设我们有obj=l1:l2:[1,2],,我们想使用arr=["l1","l2",1] 之类的级别数组来寻址obj.l1.l2[1] 然后:

Object.defineProperty(Object.prototype,'point',
    value:function(arr)
        var rez=this;
        for(var s in arr)
            rez=rez[arr[s]];
            if(rez === undefined) return undefined;
        
        return rez;
    
);

所以在定义了“point”方法之后(它是不可枚举的)我们可以使用

obj.point(arr)

获得价值 2

【讨论】:

以上是关于Javascript 变量作为对象指针的主要内容,如果未能解决你的问题,请参考以下文章

在javascript中将对象属性作为指针传递[重复]

参量与变量指针函数对象

javasc面向对象编程

C++ 初始化作为对象指针容器的成员变量

煎茶触控 1.1。我需要从 Array Javascript 变量而不是代理填充 Ext.List 对象

对象的字段实例是不是可以调用对象本身? (JavaScript)