你如何在javascript中给出变量引用?

时间:2011-01-11 01:31:28

标签: javascript variables

我想在javascript中给出变量引用。

例如,我想这样做:

a=1
b=a
a=2

并且b = 2,并相应地改变为。

这可以在javascript中使用吗? 如果没有办法像a.onchange = function(){b = a}?

那样做

我想做的是创建一个类似makeobject的函数,它创建一个对象并将它放在一个数组中,而不是像

那样返回它
function makeobject() {
   objects[objects.length] = {blah:'whatever',foo:8};
   }

所以我能做到

a=makeobject()
b=makeobject()
c=makeobject()

以及稍后的代码

for (i in objects) {
   objects[i].blah = 'whatev';
}

并且还会更改a,b和c的值

3 个答案:

答案 0 :(得分:5)

您可以使用适用于大多数浏览器的新对象文字语法来解决此问题。

var o = {
    _a : null,
    get a() { return this._a; },
    set a(v) { this._a = v; },
    get b() { return this._a; },
    set b(v) { this._a = v; }
};

o.a = 2;
o.b = 3;
o.a = 4;
alert(o.b); // alerts 4

另一种方法是创建自己的引用对象。

function Ref(obj, name, otherName) {
    this.obj = obj;
    this.name = name;
    this.otherName = otherName;
}

Ref.prototype.assign = function (v) {
    this.obj[this.name] = this.obj[this.otherName] = v;
}

var o = {
    a : 1,
    b : 4
};

var ref = new Ref(o, 'a', 'b');
ref.assign(3);

alert(o.b);

答案 1 :(得分:2)

有可能。但是你必须使用一个对象:

var a = new Object();
a.val = 6;

alert(a.val);

var b = a;
b.val = 5;

alert(a.val);

编辑:我正在玩另一种选择(即使已经标记了答案),这是另一种解决方案:

function makeobj()
{
    if(typeof makeobj.baseobj === 'undefined')
    {
        makeobj.baseobj = { 'blah': 'whatever', 'foo': 8 };
    }
    return makeobj.baseobj;
}

var a = makeobj();
var b = makeobj();
var c = makeobj();

alert(a['blah']);
alert(b['blah']);
alert(c['blah']);

b['blah'] = 'i changed the value';

alert(a['blah']);
alert(b['blah']);
alert(c['blah']);

替代解决方案允许您创建 n 对象并随时更改值,并将更改传播到makeobj()函数创建的其他变量。

答案 2 :(得分:0)

这是不可能的。

你想做什么?
我们可以找到更多Javascript-y方法来实现它。