骨干命名空间

时间:2013-11-28 11:22:06

标签: javascript backbone.js

我正在尝试从“开发Backbone.js应用程序”一书中学习骨干 它描述了臭名昭着的TodoMVC应用程序,我也在几个在线教程中查看过。

我似乎无法找到关于这行代码含义的任何解释:

var app = app || {} ;

在本书中,模型,视图,集合,路由器的代码被分成放在相应文件夹中的单独文件。每个文件都以此代码开头,但没有解释为什么它以此开头。我认为它是某种命名空间,而||是逻辑Or运算符,但坦率地说我不知道​​他们在这里想要完成什么。

任何可以启发我的人? Valleyken

3 个答案:

答案 0 :(得分:1)

在构建应用程序的某个时刻,您可能希望异步加载文件,这意味着您无法控制文件的解释顺序,因此会声明app变量。< / p>

使用var app = app || {} ;可以在Loose Augmentation模式上使用变体:您可以粗略地将此语句翻译为如果已经声明了应用程序,请保留它,如果没有创建新对象并使用它

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators以解释本声明的内部运作:

  

&amp;&amp;和||运算符实际上返回其中一个的值   指定的操作数,因此如果这些运算符与非布尔值一起使用   值,它们可能返回非布尔值。

答案 1 :(得分:0)

通常这样做是为了设置一个默认值,如果它没有传递给你的局部变量:

function(arg){
 var arg = arg || {};
 console.log(arg);
}

如果传递了arg,则将局部变量arg设置为传递的对象,否则将通过{}创建一个新对象,并将本地arg变量设置为该对象。

请参阅:Function required and not-required variables

答案 2 :(得分:0)

window.app = app || {};
app.models = app.models || {};
app.models.myModel = {
  myfunction: function () {
    // your code...
  }
}

这允许您创建空对象,您将存储所有Javascript对象。(命名空间)保持对象有条理而不是在窗口(全局命名空间)

如果javascript文件的加载顺序发生变化,|| {}只会让您不小心将名称空间设置为空对象。在将其设置为{}

之前,它会检查以确保没有对象