直接引用JavaScript属性

时间:2014-05-09 15:40:20

标签: javascript reference pass-by-reference

在回答this question about using the style.top property of a div in jQuery's $.animate()之后,我开始怀疑是否有办法更符合OP的想法。

问题是:当该属性是基本类型时,我们可以直接引用对象的属性吗?

例如,如果你有一个名为myDiv的对象,你可以获得对它的style属性的引用,因为它是一个对象,但有没有办法获得引用到top的{​​{1}}属性,以便在此更改时,您不必一次又一次地检索它? (注意:我并不是说这种检索在计算上很重要。这只是一个关于什么是可能的问题,而不是什么样的好习惯。)

style

有没有办法直接引用var myDiv = document.getElementById('myDiv'); myDiv.style.top = "100px"; var myDivStyle = myDiv.style; var myDivStyleTop = myDiv.style.top; myDiv.style.top = "200px"; console.log(myDivStyle.top); // will print "200px" console.log(myDivStyleTop); // will obviously print "100px" 属性而不通过top?我的直觉不是,但JS之前让我感到惊讶,所以我只是想确定一下。

2 个答案:

答案 0 :(得分:4)

否。变量只是可容纳值的简单容器。为变量分配新值可以从不更改其他变量或属性的值。

在这方面,变量是否包含原始值或对象并不重要,这只是变量的工作方式。

答案 1 :(得分:1)

不,没有。基元是不可变的,永远不会通过引用存储。

来自MDN

  

对象引用

     

指向对象的链接。可以使用对象引用,就好像它们是它们链接到的对象一样。在将同一对象分配给多个属性时会出现对象引用的概念。每个已分配的属性都不包含该对象的副本。相反,它们包含链接到同一对象的对象引用。实际上,这意味着如果修改了对象,则引用该对象的所有属性都会反映修改。

     

原始值,原始值

     

不是对象且没有任何方法的数据。 JavaScript有5种原始数据类型: string ,number,boolean,null,undefined 。除了null和undefined之外,所有基元值都具有包围原始值的对象等价物,例如, String对象包装字符串基元。 所有原语都是不可变的