Вопрос о указателе Javascript на свойство объекта - PullRequest
1 голос
/ 14 апреля 2011

Я хотел установить переменную, указывающую на свойство во вновь созданном объекте, чтобы сохранить «поиск», как показано в примере ниже.По сути, я думал, что переменная является ссылкой на свойство объекта.Это не вариант;похоже, что переменная содержит значение.Первый файл console.log равен 1 (это значение, которое я хочу назначить для photoGalleryMod.slide), но при просмотре photoGalleryMod.slide оно все равно 0.

Есть ли способ сделать это?Спасибо.

(function() {
    var instance;

    PhotoGalleryModule = function PhotoGalleryModule() {

        if (instance) {
            return instance;
        }

        instance = this;

        /* Properties */
        this.slide = 0;
    };
}());

window.photoGalleryMod = new PhotoGalleryModule();

/* Tried to set a variable so I could use test, instead of writing photoGalleryMod.slide all the time plus it saves a lookup */

var test = photoGalleryMod.slide;

test = test + 1;

console.log(test);
console.log(photoGalleryMod.slide);

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

Да, вы делаете копию значения, потому что для «слайда» задан тип примитива.Попробуйте это:

this.slide = [0];

, а затем

var test = photoGalleryMod.slide;
test[0] = test[0] + 1;

, затем измените запись:

console.log(test[0]);
console.log(photoGalleryMod.slide[0]);

В этом случае вы увидите, что вы делаете имеет ссылку на тот же объект.В отличие от некоторых других языков (C ++), в JavaScript нет способа сказать: «Пожалуйста, дайте мне псевдоним для этой переменной».

2 голосов
/ 14 апреля 2011

похоже, что переменная содержит значение

Это правильно.Поскольку вы используете числовые примитивы, переменные содержат значение, а не указывают на него.Переменные содержат ссылки только тогда, когда они ссылаются на объекты.

Способ сделать это состоит в том, чтобы использовать свойство объекта и указывать на объект - это именно то, что у вас есть с photoGalleryMod и slide собственность.

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