我需要在对象中设置json对象属性,然后从同一对象中的另一个对象引用该属性

时间:2013-05-11 00:53:08

标签: javascript jquery json object

我有这个问题,我希望能够根据浏览器更改正在使用的音频。我所拥有的是一个下面看到的对象,它有一个“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”。我当时认为它与范围有关但老实说我很难过,我觉得我已经尝试了点符号的每一种组合来试图获得属性,但我只是没有正确引用属性。

非常感谢任何帮助,提前谢谢!

3 个答案:

答案 0 :(得分:2)

你想做什么是不可能的。

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

你可以在对象中使用一个函数。

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

{后重置该值{2}}

答案 1 :(得分:0)

然后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定义为函数,它将调用它,否则将其视为属性。

答案 2 :(得分:-3)

这应该有用,试一试:

var object = {
  ext: { sound: '.mp3' },
  StAd0: { src: 'ar/55871'+ object.ext.sound }
}