Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 导出对象的用途是什么?_Javascript_Backbone.js - Fatal编程技术网

Javascript 导出对象的用途是什么?

Javascript 导出对象的用途是什么?,javascript,backbone.js,Javascript,Backbone.js,在backbone.js的前几行中,我不明白他们为什么要在导出或请求上测试未定义 很明显,这将是未定义的,因为他们没有设置它。如果它是一个全局(窗口)对象,那么他们会明确地说出来 root.exports // they don't do this root.require 他们为什么要检查这个 typeof exports !== 'undefined' 还有这个 if (!_ && (typeof require !== 'undefined')) 这是从上面来的吗

在backbone.js的前几行中,我不明白他们为什么要在导出或请求上测试未定义

很明显,这将是未定义的,因为他们没有设置它。如果它是一个全局(窗口)对象,那么他们会明确地说出来

root.exports  // they don't do this
root.require
他们为什么要检查这个

typeof exports !== 'undefined'
还有这个

if (!_ && (typeof require !== 'undefined'))
这是从上面来的吗

!_
完整片段

(function(){
    var root = this, 
        previousBackbone = root.Backbone,
        slice = Array.prototype.slice,      
        splice = Array.prototype.splice,
        _ = root._,
        Backbone;
    if (typeof exports !== 'undefined') {
        Backbone = exports;
    } else {
        Backbone = root.Backbone = {};
    }
    Backbone.VERSION = '0.9.2';
    if (!_ && (typeof require !== 'undefined')) {
        _ = require('underscore');
    }

我相信,这是为了允许
Backbone.js
用作
Common.js
模块。详情如下:

具体来说,这一点:

在模块中,有一个名为“exports”的自由变量,该变量是一个对象,模块可以在执行时将其API添加到该对象中

此外,本部分还包括您关于
要求
的问题:

在模块中,有一个自由变量“require”,即函数。“require”函数接受模块标识符。“require”返回外部模块的导出API


exports是一个node.js全局变量,用于在创建模块时公开公共方法。Backbone.js似乎是这些模块中的一个。好吧……他们为什么不使用root.exports……这是一个缩短查找链的优化。我想这已经在前面得到了回答:不,不,不完全是……问题是他们没有使用root……来向读者传达这是一个全局的。可能是因为“root”没有在浏览器全局“窗口”中定义,并且会抛出,因为此检查是一个环境检查,但为什么不使用root.exports…这将加快查找链…更重要的是,这将使它明显是一个全局的。@HiroProgator我不能确切地回答这个问题-也许他们只是没有想到这一点?或者可能是后来添加了
root
变量,而他们不想更改该位?我只是猜测…他们除了require.js…common.js它是可选的…仅供参考之外没有任何“硬依赖项”。