4

Backbone 暴露在前 50 行左右的代码中。

JQuery 在最后 50 行代码左右。

为什么有区别?

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

Github 骨干网

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

jQuery 最新

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

3 回答 3

2

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

jQuery 似乎创建了一个闭包并稍后将其公开给全局范围,因为在 noConflict-Mode 中可能不公开“$”而只公开“jQuery”。这似乎也确保了“就绪”事件在定义所有操作之前不会过早运行,因为 JS 的回调可能会有一些棘手的竞争条件......

于 2012-09-27T21:54:15.603 回答
1

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

  • Backbone(尤其是 Underscore)是作为一个更通用的 JavaScript 库编写的,它被设计为可选地可用于服务器端(Node.js)或浏览器外部使用。因此,它在其中工作的上下文更具可变性,并且它与该上下文的连接更易于与 common.js 和 require.js 等内容一起使用。因此,早期关注的是周围环境,而不是库本身的可用性,特别是因为 Backbone 用于命名空间通常会更加定义和定制的环境(包括开发人员将更积极参与的富浏览器应用程序)在这些担忧中)。

  • jQuery 的设计意图是在 Web 浏览器中使用。因此上下文是固定的,jQuery 可以在命名空间内构建库。jQuery 的重点然后切换到在特定位置(如$or jQuery)易于使用和易于使用,同时允许避免经常污染的浏览器环境中的冲突:最初是在混乱中提供生命线,而不是适应更大的结构化环境(正如它如何成为插件的守护者而不是促进更高的模块化所证明的那样)。

于 2012-09-27T22:01:15.250 回答
0

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

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

(function(){
  var root = this;

  ...
}).call(this);

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

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

以下是我发表的演讲幻灯片,其中涵盖了这个确切的主题: https ://speakerdeck.com/krunkosaurus/deep-dive-into-backbone-dot-js-internals-plus-underscore-dot-js

于 2012-10-29T23:40:57.707 回答