0

我有这个问题,我希望能够根据浏览器更改正在使用的音频。我所拥有的是下面看到的一个对象,它有一个“ext:{sound:'.mp3'}”,在某些时候我会在浏览器之间做出一些区分,然后使用类似“object.ext.sound = '.ogg' " 根据正在使用的浏览器设置新的声音类型。如何从对象中引用该变量,例如“StAd0”?

var object = {
    ext: {
        sound: '.mp3'
        },
    pref: {
        acc: 1
    },
    StAd0: {
        from: 25,
        to: 180,
        src: 'ar/55871'+ this.ext.sound,
        du: 5228
    },
    Image_33: {
        type: 15,
        from: 4,
        to: 48,
        rp: 0,
        rpa: 0,
        mdi: 'Image_33c',
        trin: 6,
        trout: 6,
        ef: {}
    },
    Image_33c: {
        b: [171, 259, 850, 360],
        ip: 'dr/7029_679_101.png',
        dn: 'Image_33',
        visible: 1,
        accstr: 'Image ',
        vb: [171, 259, 850, 360]
    }
}

我现在拥有事物的方式一直在说“this.ext.sound”的值是“undefined”。我以为它与范围有关,但老实说,我很难过,我觉得我已经尝试了点符号的每种组合来尝试获取该属性,但我只是没有正确引用该属性。

非常感谢任何帮助,在此先感谢!

4

3 回答 3

2

您尝试做的事情是不可能的。

必须先初始化对象,然后才能引用其值

您可以在对象内部使用函数。

或更改为的初始值StAd0.src''或在设置为'ar/55871'之后重置该值var object;object.StAd0.src = 'ar/55871'+ object.ext.sound;

var object = {
ext: {
    sound: '.mp3'
    },
pref: {
    acc: 1
},
StAd0: {
    from: 25,
    to: 180,
    src: 'ar/55871',
    du: 5228
},
Image_33: {
    type: 15,
    from: 4,
    to: 48,
    rp: 0,
    rpa: 0,
    mdi: 'Image_33c',
    trin: 6,
    trout: 6,
    ef: {}
},
Image_33c: {
    b: [171, 259, 850, 360],
    ip: 'dr/7029_679_101.png',
    dn: 'Image_33',
    visible: 1,
    accstr: 'Image ',
    vb: [171, 259, 850, 360]
}
};
 object.StAd0.src = 'ar/55871'+ object.ext.sound;
于 2013-05-11T03:03:41.083 回答
1

那么 src 必须是一个函数。

var object = {
    ext: {
        sound: '.mp3'
        },
    pref: {
        acc: 1
    },
    StAd0: {
        from: 25,
        to: 180,
        src: function() {
            return 'ar/55871'+ this.ext.sound;
        },
        du: 5228
    },
    Image_33: {
        type: 15,
        from: 4,
        to: 48,
        rp: 0,
        rpa: 0,
        mdi: 'Image_33c',
        trin: 6,
        trout: 6,
        ef: {}
    },
    Image_33c: {
        b: [171, 259, 850, 360],
        ip: 'dr/7029_679_101.png',
        dn: 'Image_33',
        visible: 1,
        accstr: 'Image ',
        vb: [171, 259, 850, 360]
    }
}

但是你必须像这样得到 src,

object.stAd0.src();

编辑:

无论如何,如果没有函数,就无法做到这一点,因为如果你像这样尝试,

src: ar/55871+ this.ext.sound;

这只会在解析时工作一次。比它里面会有一个静态值。

如果您不能将所有 src 属性更改为功能,您也可以像这样获得它。

var src = (typeof object.StAd0.src == "function")? object.StAd0.src() : object.StAd0.src;

因此,如果 src 被定义为一个函数,它将调用它,否则它将把它当作一个属性。

于 2013-05-11T00:58:48.370 回答
-6

这应该可以,试一试:

var object = {
  ext: { sound: '.mp3' },
  StAd0: { src: 'ar/55871'+ object.ext.sound }
}
于 2013-05-11T01:11:32.057 回答