0

首先,我是一个 JavaScript 菜鸟,甚至是Backbone.js的菜鸟。

我正在关注一些在线教程来熟悉这项技术;在一些教程中我看到了这个:

Person = Backbone.Model.extend({
    initialize: function(){
        alert("Welcome to this world");
    }
});

var person = new Person;

其他人中,我发现了这个符号:

window.WineView = Backbone.View.extend({
    initialize:function () {
        this.model.bind("change", this.render, this);
    }
});

在视图名称中添加“窗口”有什么必要?我阅读了一些JavaScript 文档,其中指出该window对象代表当前浏览器窗口,那么我们是否将创建的视图添加为该对象的属性?作者为什么要这么做?

4

2 回答 2

2

在浏览器 JavaScript 中,window是全局对象,因此window.Person === Person除非在作用域链 ( )Person中的某处定义。function() { var Person; ... }

换句话说,没有区别。(除了使用 7 个额外的字符。)

您可能想阅读JS scope。具体来说,如果您分配给其他未定义的变量 ( Person = { ... };),则该变量将分配给全局对象 ( window)。但是,如果您首先声明一个变量 ( var Person = { ... };),则该变量将分配给本地范围。

于 2012-06-08T17:35:37.010 回答
0

撇开架构问题(将关联的对象和属性放在一起),全局变量的处理方式与对象属性的处理方式不同(如果它们尚未定义)。例如,假设上面的代码还没有运行和定义这些对象,评估

Person

将导致 JavaScript 错误,因为它是未定义的全局变量;Person检查是否已设置的正确方法是更详细

typeof Person !== 'undefined'

另一方面,

window.WineView

不会导致错误,而是会返回undefined

于 2012-06-08T17:38:06.577 回答