什么是出口对象?

时间:2012-09-27 13:45:51

标签: javascript backbone.js

在backbone.js的前几行中,我不明白他们为什么要测试出口上的undefined或者需要

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

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');
    }

1 个答案:

答案 0 :(得分:4)

允许Backbone.js用作我认为的Common.js模块。更多详情:http://wiki.commonjs.org/wiki/Modules/1.1

特别是这一点:

  
    
      

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

    
  

此外,此位还包含有关require的问题:

  
    
      

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