Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象内部引用声明_Javascript - Fatal编程技术网

Javascript 对象内部引用声明

Javascript 对象内部引用声明,javascript,Javascript,我正在寻找一种快捷方式,将字典中的值用作字典内部的引用。代码显示了我的意思: var dict = { 'entrance':{ 'rate1': 5, 'rate2':10, 'rate3':20, }, 'movies':{ 'theDarkKnight':{ '00:00':<entrance.rate1>, '18:00':<entr

我正在寻找一种快捷方式,将字典中的值用作字典内部的引用。代码显示了我的意思:

var dict = {
    'entrance':{
        'rate1': 5,
        'rate2':10,
        'rate3':20,
    },

    'movies':{
        'theDarkKnight':{
            '00:00':<entrance.rate1>,
            '18:00':<entrance.rate2>,
            '21:00':<entrance.rate3>
        },
        ...
    };
var dict={
“入口”:{
“比率1”:5,
“比率2”:10,
“比率3”:20,
},
‘电影’{
“黑暗骑士”:{
'00:00':,
'18:00':,
'21:00':
},
...
};

有什么鬼鬼祟祟的方法吗?

没有。你能做的最好的方法是:

var dict = {
    'entrance' : {
        'rate1' : 5,
        'rate2' : 10,
        'rate3' : 20,
    }
};
dict.movies = {
    'theDarkKnight' : {
        '00:00' : dict.entrance.rate1,
        '18:00' : dict.entrance.rate2,
        '21:00' : dict.entrance.rate3
    },
    ...
};
您可以使用json并将其定义为“mustache模板”,然后运行mustache来呈现模板。考虑到如果您有嵌套的依赖项,则需要运行(n)次。在这种情况下,您有3个依赖项
ABC-->AB-->a

var mustache = require('mustache');

var obj = {
  A : 'A',
  AB : '{{A}}' + 'B',
  ABC : '{{AB}}' + 'C'
}

function render(stringTemplate){
  while(thereAreStillMustacheTags(stringTemplate)){
    stringTemplate = mustache.render(stringTemplate, JSON.parse(stringTemplate));
  }
  return stringTemplate;
}

function thereAreStillMustacheTags(stringTemplate){
  if(stringTemplate.indexOf('{{')!=-1)
    return true;
  return false;
}

console.log(render(JSON.stringify(obj)));
输出为:

{"A":"A","AB":"AB","ABC":"ABC"}

不幸的是,JSON不支持递归/自引用。这不是JSON。您是在使用文字语法创建对象时询问自引用吗?还是说希望指定的值随引用值的更改而自动更新?因为它不是JSON,所以可以使用函数或属性获取程序来设置其他属性的当前值。@Cerbrus:No…JSON!=JavaScript。JSON语法类似于(并基于)JavaScript的文字符号,但这就是相似性结束的地方。它们是两个非常不同的东西。@Cerbrus:It更像是“独立于语言的数据结构符号”。如果是JSON,它最终是Unicode文本数据。由于与JavaScript的文字符号相似,在大多数情况下,您可以使用
eval()
将JSON数据字符串处理到JavaScript程序中,但它最终是一种独立于平台的数据交换格式…有点像XML。可能重复