骨干网命名

Backbone namespacing

本文关键字:骨干网      更新时间:2023-11-18

我正试图从《开发backbone.js应用程序》一书中学习主干
它描述了臭名昭著的TodoMVC应用程序,我也在几个在线教程中查看了它。

我似乎在任何地方都找不到关于这行代码含义的解释:

var app = app || {} ;

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

有谁能启发我吗
Valleyken

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

使用var app = app || {} ;可以使用松散增强模式的变体:您可以大致将此语句转换为如果应用程序已经声明,请保留它,如果不创建新对象并使用它

看看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators对于本声明的内部工作原理的解释:

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

通常这样做是为了在未传递本地变量时为其设置默认值:

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

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

请参阅:需要和不需要的函数变量

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

这允许您创建空对象,将所有Javascript对象存储在其中。(名称空间)保持对象有序,而不是在窗口上(全局名称空间)

|| {}只是防止您在javascript文件的加载顺序发生变化时意外地将命名空间设置为空对象。在将其设置为{} 之前,它会进行检查以确保没有对象