首先,我是一个JavaScript菜鸟,甚至是Backbone.js中的 noober 。
我正在学习一些在线教程以熟悉该技术;而在some tutorials我看到了这个:
Person = Backbone.Model.extend({
initialize: function(){
alert("Welcome to this world");
}
});
var person = new Person;
在other ones我找到了这个符号:
window.WineView = Backbone.View.extend({
initialize:function () {
this.model.bind("change", this.render, this);
}
});
在视图名称中添加“窗口”的必要性是什么?我读了一些JavaScript documentation来说明window
对象代表了当前的浏览器窗口,那么我们是否将创建的视图添加为该对象的属性?为什么作者这样做?
答案 0 :(得分:2)
在浏览器JavaScript中,window
是全局对象,因此window.Person === Person
除非在作用域链(Person
)的某处定义了function() { var Person; ... }
。
换句话说,没有区别。 (除了使用7个额外字符外。)
您可能希望阅读JS scope。具体来说,如果您分配给另一个未定义的变量(Person = { ... };
),该变量将被分配给全局对象(window
)。但是,如果您首先声明变量(var Person = { ... };
),则该变量将分配给本地范围。
答案 1 :(得分:0)
不考虑架构问题(将关联的对象和属性放在一起),如果尚未定义全局变量,则对象属性的处理方式与对象属性不同。例如,假设上面的代码尚未运行并定义了那些对象,则评估
Person
会导致JavaScript错误,因为它是一个未定义的全局变量;检查Person
是否已设置的正确方法是更详细的
typeof Person !== 'undefined'
另一方面,
window.WineView
不会导致错误,而是返回undefined
。