【问题标题】:Question about Javascript pointer to an object property关于指向对象属性的Javascript指针的问题
【发布时间】:2011-04-14 18:26:23
【问题描述】:

我想设置一个变量以指向新创建的对象中的属性以保存“查找”,如下例所示。基本上,我认为变量是对对象属性的引用。不是这种情况;看起来变量包含该值。第一个 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);

【问题讨论】:

    标签: javascript object reference


    【解决方案1】:

    是的,您正在制作该值的副本,因为“幻灯片”设置为原始类型。试试这个:

    this.slide = [0];
    

    然后

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

    然后更改日志记录:

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

    在这种情况下,您会看到您确实引用了同一个对象。与其他一些语言 (C++) 不同,在 JavaScript 中没有办法说“请给我这个变量的别名”。

    【讨论】:

    • 那行得通。不幸的是,幻灯片只是一个原始的,所以 T.J.克劳德说我已经说对了。我不能让这段代码更短。
    • 是的,这是真的——我只是说我写的只是一个说明性的例子。
    【解决方案2】:

    看起来变量包含值

    没错。由于您使用的是数字原语,因此变量 包含 值而不是指向它。变量仅在引用对象时才包含引用。

    这样做的方法是使用对象属性并指向该对象——这正是您使用photoGalleryMod 及其slide 属性所拥有的。

    【讨论】:

    • 感谢您的确认。只是想确保我没有误解 Javascript 的这一方面。
    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多