模块定位浏览器和nodejs的模式

时间:2011-05-20 13:45:46

标签: node.js backbone.js javascript

主干和下划线在浏览器和nodejs中都可用。

他们使用以下模式:

(function(){
  // The top-level namespace. All public Backbone classes and modules will
  // be attached to this. Exported for both CommonJS and the browser.
  var Backbone;
  if (typeof exports !== 'undefined') {
    Backbone = exports;
  } else {
    Backbone = this.Backbone = {};
  }

  // ...
})();

这是实现这一目标的最佳方法吗?

2 个答案:

答案 0 :(得分:2)

“最佳”?嗯,这是一个主观的事情;这当然是一个好方法。

你遗漏的一点非常重要的是该函数应该使用this作为对全局上下文的引用 - 针对浏览器的代码会调用“window”:

(function() {
  var global = this; // like "window"

这样,代码就可以“导出”符号:

  global.Foo = someFunction;

另一个类似的技巧是这样做:

(function(global) {
  // ...
})(this);

这几乎有同样的效果。

答案 1 :(得分:0)

使用ECMAScript 5严格模式(以及未来版本的JavaScript),只有Pointy的版本可以使用,因为“this”不再指向非方法函数中的全局对象。代替:

(function() {
    "use strict";
    console.log("This is "+this); // "This is undefined"
}());