javascript,jQuery:如何保存值而不是引用

时间:2010-06-01 19:12:04

标签: javascript jquery

我使用以下行来存储对象的位置。

var lightboxTop = $('#lightbox').css('top');
var lightboxLeft = $('#lightbox').css('left');

我在我的元素中连续移动了这个对象,我想用存储的变量恢复它以前的位置。

但是,我担心javascript会通过引用保存值,所以我失去了初始位置。我对么 ?我该如何解决这个问题?

感谢

4 个答案:

答案 0 :(得分:3)

在这种情况下,它不存储任何引用,而是存储实际值。

答案 1 :(得分:1)

不,返回的值不会通过引用存储。如果您更改元素的topleft样式,则不会影响您的存储值。

javascript中的原始类型不会通过引用传递。

    var a = "a";

    var b = a;

    a = "c";

    alert(b);  // alerts "a"
    alert(a); // alerts "c"

    var a = 1;

    var b = a;

    a = 3;

    alert(b);  // alerts "1"
    alert(a); // alerts "3"

通过引用传递对象:

    var a = {one:"one"};

    var b = a;

    a.one = "three";

    alert(b.one);  // alerts "three"
    alert(a.one); // alerts "three"

答案 2 :(得分:1)

Javascript不支持“按引用”。

var a = 1; // a is 1
var b = a; // b is set to the value of a, that is, 1
a = 2; // a is set to 2, b is still 1

传递'引用'的唯一方法是共享变量是

属性的对象
var props = {};
props.a = 1;
var newprops = props; // props === newprops = true, both variables point to the same reference
newprops.a // is 1
props.a = 3;
newprops.a // is 3

如果我们替换指向对象引用的其中一个变量会发生什么?

props = {}; // props === newprops = true, props is set to a NEW object, newprops still points to the old one
props.a = 2; // is 2
newprops.a; // is still 3

答案 3 :(得分:0)

您可以尝试jQuery.clone()方法,如下所示:

var l = $('#lightbox');
var start = l.clone().hide();

然后移动l,然后将其移除并重新显示start