Dojo 118n资源构建;为什么?

时间:2013-06-22 13:44:58

标签: javascript dojo

在dojo 1.9源代码中,dijit / nls / common.js我看到了这个

define({ root:    
({
    buttonOk: "OK",
    buttonCancel: "Cancel",
    buttonSave: "Save",
    itemClose: "Close"
})

//etc

为什么作者使用了

( { /*data*/ } ) 

构建体?这究竟意味着什么?为什么{}不够? ()可能是分隔表达式,但为什么有必要这样做呢?

1 个答案:

答案 0 :(得分:1)

我认为这个特定的例子没有任何理由。

但在某些情况下......

  

(请注意,如果对象出现在需要语句的位置,您可能需要将对象文字包装在括号中,以免文字与块语句混淆。)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

eval()可能与它有关,但在你的特定例子中,JS解析器应该处理代码,不应该使用eval()

E.g。 (没有括号):

SyntaxError: invalid label

eval("{a:1, b:2}")

和(括号):

>>> eval("({a:1, b:2})")
Object { a=1, b=2}

也许它与Dojo的构建过程有关,并且NLS模块被重新格式化以需要括号?似乎不太可能,因为这似乎很脆弱,构建过程本身可以轻松添加括号。


编辑:我刚刚在GitHub上查看了此文件的历史记录。

原始版本(在GitHub中 - https://github.com/dojo/dijit/blob/11f94ad6cebba102b8411ed1a67e35aed94a97bb/nls/common.js)如下所示:

({
    buttonOk: "OK",
    buttonCancel: "Cancel",
    buttonSave: "Save",

    notSet: "Not set",
    left: "Left",
    right: "Right",
    center: "Center",
    middle: "Middle",
    top: "Top",
    bottom: "Bottom",

    //units
    unitPixel: "pixels",
    unitPercent: "percent",
    width: "Width",
    height: "Height"
})

所以我猜这个文件最初是eval'd,括号在历史上是必要的,但是随着向AMD转移,它变得有些多余。

当然可能是错的!

相关问题