Как вы даете ссылку на переменные в JavaScript? - PullRequest
4 голосов
/ 11 января 2011

Я хочу дать ссылку на переменную в 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 ]

5 голосов
/ 11 января 2011

Вы можете выполнить это, используя новый синтаксис литералов объектов, который хорошо работает в большинстве браузеров.

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);
2 голосов
/ 11 января 2011

Это возможно. Вы должны использовать объект, однако:

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().

0 голосов
/ 11 января 2011

Это невозможно.

Что вы пытаетесь сделать?
Возможно, мы найдем вам больше способов сделать это в Javascript-е.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...