Javascript 我应该使用什么其他技巧来代替导出符号

Javascript What other tricks should i employ instead of exporting symbols

本文关键字:符号 我应该 什么 其他 Javascript      更新时间:2023-09-26

Google Closure 库提供了导出符号选项,以通过窗口对象提供对构造函数的访问。

例如:导出任务将允许执行window.task

但这与谷歌关闭库相去甚远。我正在使用Backbone.js来构建任务应用程序。我的视图,模型,路由器和拆分为许多文件,我按照上述过程将实例,源分配给窗口对象,以便可以访问另一个。

  • 如何不通过窗口访问单个应用程序的模型、视图和路由器?你用了什么技巧,技巧来使它们有点沙盒化

您几乎总是必须在窗口中至少公开一件事。

但是,您可以使用命名空间来提供帮助。

// app.js
var App = App || {};
App.Views = App.Views || {};
App.Models = App.Models || {};
App.Views.HomeView = Backbone.View.extend({});
App.Model.User = Backbone.Model.extend({});

唯一不一定的情况是你使用的是requireJS。

// app.js
define(['views/home'], function (home) {
    var home = new home({
        el: '#home'
    });
});
// views/home.js
define(['backbone'], function (Backbone) {
    var home = Backbone.View.extend({});
    return home;        
});

虽然,我想如果你真的想,你可以在自执行函数中做所有事情。

(function ($, Backbone) {
    // Do your stuff here instead?.
    // Just keep in mind, nothing you do in here will be available outside.
    var home = Backbone.View.extend({});
    new home(); // Works...
}(jQuery, Backbone);
new home(); // FAIL!

唯一的问题是您在函数内部执行的任何操作在函数外部都不可用。

如果您对任何实现有任何疑问,请告诉我。

无论您使用全局范围(在浏览器中也称为"窗口")或其他对象来保存您的命名空间,总会有发生冲突的机会。使用其他内容只会让您不必担心默认属性窗口已经具有的内容。

任何模块的最佳实践是仅向外部视图(通过窗口或其他方式)公开单个对象,并将其他所有内容作为其属性,因为这会将冲突的可能性降低到绝对最小。