窗口之间有什么区别.主干网中的视图名称和视图名称.js

What's the difference between window.ViewName and ViewName in Backbone.js?

本文关键字:视图 js 之间 什么 区别 主干网 窗口      更新时间:2023-09-26

首先,我是 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 对象表示当前的浏览器窗口,那么我们是否将创建的视图添加为此对象的属性?作者为什么要这样做?

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

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

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

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

Person

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

typeof Person !== 'undefined'

另一方面

window.WineView

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