全球曝光| jQuery与Backbone

时间:2012-09-27 21:47:52

标签: javascript jquery backbone.js

Backbone在前50行代码中暴露自己。

JQuery在最后50行代码中。

为什么会有差异?

这只是随机的开发者选择。或者我有没有在这里看到的目的。

Github Backbone

Backbone = root.Backbone = {}; // line 33

JQuery Latest

window.jQuery = window.$ = jQuery; // near bottom..can someone post github link 

3 个答案:

答案 0 :(得分:2)

Backbone似乎使用对象原型设计并在之后应用功能/功能。

jQuery似乎创建了一个闭包,并在以后将它暴露给全局范围,因为在noConflict-Mode中有可能不暴露“$”而只暴露“jQuery”。这似乎也确保了“ready”-Event在定义所有动作之前不会太早运行,因为JS可以通过其回调来获得一些棘手的竞争条件......

答案 1 :(得分:1)

基于部署上下文的开发人员选择。

  • Backbone(更值得注意的是Underscore)被编写为更通用的JavaScript库,可以选择用于服务器端(Node.js)或浏览器外部使用。因此,它在其中工作的上下文变得更加可变,并且它对该上下文的附加对于与common.js和require.js之类的东西一起使用时更加柔韧。因此,早期关注周围环境而不是库本身的可用性,特别是因为Backbone用于通常更加定义和定制命名空间的环境中(包括开发人员更积极参与的丰富浏览器应用程序)在那些关注中)。

  • jQuery的设计目的是在Web浏览器中使用。因此上下文是固定的,jQuery可以在命名空间中构建库。然后,jQuery的重点转向在特定位置(如$jQuery)随时可用且易于使用,同时允许在经常被污染的浏览器环境中避免冲突:最初提供生命线混乱,而不是适应更大的结构化环境(如它成为插件的监护人,而不是促进更高的模块化)。

答案 2 :(得分:0)

好问题。 Backbone可以在服务器端或客户端工作。 jQuery被用于在必须存在全局窗口对象的DOM环境中工作。在像Node这样的服务器端环境中,全局对象称为global

你很接近但Backbone源中设置这个的实际部分实际上是前2行和最后一行:

(function(){
  var root = this;

  ...
}).call(this);

与大多数框架一样,Backbone以匿名函数开始封装其设置,但在这种情况下,它在全局范围this的上下文中调用该方法,该范围在Web客户端中解析为window和服务器端节点上的global

请注意,jQuery可能不会做这样的事情,因为它依赖于许多DOM方法,如document.getElementById。但是,可以在服务器端创建虚拟DOM环境以加载jQuery。请参阅JSDOM之类的项目。

以下是我给出的演讲的幻灯片,其中我将介绍这个话题: https://speakerdeck.com/krunkosaurus/deep-dive-into-backbone-dot-js-internals-plus-underscore-dot-js