我无法理解的主干库代码模式
backbone library code patterns I couldn't understand
我是中级JavaScript开发人员,试图了解出色的JavaScript开发人员如何编写他们的代码,我决定开始研究Backbone库作为起点。
这是在 Backbone 中进行初始设置的一些代码片段,请帮助我理解它。
代码1 -
(function(){
var root = this;
}).call(this);
是否有任何特定的原因使用调用方法而不是简单地使用 (),或者它只是一个编码首选项,如果我必须编写相同的代码,我会做这样的事情。
(function(root){
})(this);
代码2 -
var Backbone;
if (typeof exports !== 'undefined') {
Backbone = exports;
} else {
Backbone = root.Backbone = {};
}
现在在全局范围内没有导出的定义,在本地范围内的任何地方也没有定义,那么如果我正在编写与我会编写的相同代码,那么如果块在这里做什么
var Backbone = root.Backbone = {};
代码 3
var _ = root._;
if (!_ && (typeof require !== 'undefined')) _ = require('underscore')._;
再次,我在本地或全局范围内的任何地方都找不到需求的定义
代码块 1
这取决于开发人员的偏好,你可以用任何一种方式编写代码,事实上,许多库确实更喜欢你建议的风格。
代码块 2
此块是对 AMD 样板的采用。 AMD 库提供了将 JavaScript 代码拆分为模块所需的钩子。 在代码块的情况下,exports
对象是 CommonJS 模块标准使用的全局对象。 如果全局exports
不存在,则主干将直接添加到root
对象。
一个有趣的旁注是,Backbone不支持导出到流行的RequireJS AMD库。
代码块 3
require
是 AMD 库引入的另一个全局版本,见上文。
在 code1 中,call(this)
将当前this
的引用传递给函数。如果在全球范围内执行此操作,则this
window
。我认为这只是偏好,在这种情况下没有区别。
require
和exports
由NodeJS(或CommonJS兼容库)提供,它们是CommonJS规范的一部分。
我认为代码 2 是为了保护框架,以防其他人在全局范围内定义导出。因此,他们检查它是否未定义,这意味着其他人这样做了,然后他们只是将其重置为空对象。
回答了你所有的问题。不确定您是否看过 Backbone 的注释源代码.js之前,这对您很有用。
http://documentcloud.github.com/backbone/docs/backbone.html
- Markdown模式代码镜像正在创建
- Joomla模式框弹出代码在文章中有效,但在代码中无效
- TypeScript代码类似于揭示模块模式结构
- 我无法理解的主干库代码模式
- 谷歌跟踪代码管理器使用什么模式来观察 de 'dataLayer' 数组
- 如何使用 php 代码内部显示引导模式弹出窗口
- Ace代码编辑器:缓存模式对象
- 代码在调试模式下工作
- 多种模式代码镜像
- 类代码结构,使用非立即执行的模块模式变体
- 如何防止引导模式关闭表单提交使用代码点火器
- JavaScript代码中的三明治模式
- 代码仅在调试器模式下工作,断点位于 Consol.log否则不起作用
- 通过选择菜单即时更改代码镜像模式
- 如何使用代码点火器根据传递的 ID 在引导模式中加载视图
- 带有代码隐藏的 Jquery 模式
- 代码点火器模式不工作
- “样式”代码在 MVC 模式中的位置
- 从文件顶部移动javascript代码,可能使用设计模式
- 使用 if 和 else 将 JavaScript 代码转换为模式可读代码