【问题标题】:I need to set a json object property in a object, then reference that property from another object in the same object [duplicate]我需要在一个对象中设置一个json对象属性,然后从同一个对象中的另一个对象引用该属性[重复]
【发布时间】:2013-05-11 00:53:08
【问题描述】:

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

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

【问题讨论】:

  • 这些都不能满足我的需要,不幸的是,从我读到的在同一个文字中引用 javascript 文字的方法看起来并不像。它必须来自内部的原因是因为客户端使用的是 Adob​​e Captivate,它发布了具有此 javascript 对象文字的 projects.js。

标签: javascript jquery json object


【解决方案1】:

你试图做的事情是不可能的。

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

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

或将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;
后重置该值

【讨论】:

  • 是的,这就是我的想法,糟糕的是,现在我必须手动编写一个脚本来查找所有 75 个声音文件,遍历它们,拆分它们,然后放回新的扩展名中。似乎应该有一些更简单的方法,但是是的,在寻找了一点之后,我想我会在放弃希望之前把这个打开!谢谢!
【解决方案2】:

那么 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属性改成function,也可以这样弄。

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

所以如果 src 被定义为一个函数,它会调用它,否则就会把它当作一个属性。

【讨论】:

  • 所以没有办法只添加一个引用 json 对象“ext”的变量并用它替换文件扩展名?我不能使用一个函数,其中有 20 门课程包含 75 个此扩展的实例,并且该程序旨在以自动方式获取这些属性,如果我打破它,它将破坏代码。有没有其他办法?
  • @TomBird,不,看看我更新的答案。
【解决方案3】:

这应该可以,试一试:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多