Backbone源码分析(一)

716 查看

  距离上一篇博客有一段时间了,期间各种琐事萦绕。最主要的一件是,当我差不多将整个dojo核心源码看完,惊讶的发现dojo1.*的设计以是老态龙钟之象,而我沉溺在dojo中太久,已经不知道前端世界变成了什么样。这无异于晴天霹雳,霹的我目瞪口呆、汗流满面,惶惶不可终日。索性亡羊补牢为时未晚,这段期间虽有各种烦心事,但还能于百烦之中腾出点时间,看看源码已经是万中之幸。各种前端类库如浩瀚星辰,面对它们才能感觉到自身技术的浅薄,自身能力的低微。初出茅庐天下无敌,再练三年寸步难行,这就是我当前最真切的体悟。现在的我只能找几个经典类库,悉心研究,戒骄戒躁,诚诚恳恳的去学习大牛的代码,今天为大家带来backbone的源码研究。能力浅薄,不足之处请各位大牛不吝斧正。

 

从backbone的总体结构来看,是一个立即执行的函数表达式,参数是一个匿名函数。(function(){})()和(function(){}())的目的是将函数声明转换为函数表达式,消除Js引擎在识别函数声明和函数表达式上的歧义,除了小括号外还有其他运算符能够做到,详细介绍可以参照这篇文章:js中(function(){…})()立即执行函数写法理解

模块处理内容如下:

factory部分整体结构如下:

本篇文章中,我们简单学习两个比较有用的工具方法:noConflict和extend。

  首先介绍noConflict模式。这是jquery发明的使用方法,之后大家争相相仿。主要原理是因为JavaScript采用的词法作用域(通过阅读变量定义在内的少数几行代码就能知道变量的作用域),函数的作用域由定义时决定而不是由函数调用时决定的,所以noConflict运行时能够访问到previousBackbone变量。如果已经有全局的Backbone变量,先将全局的Backbone变量暂存在previousBackbone内,当调用noConflict时,全局的Backbone指向之前暂存在previousBackbone中的Backbone,而返回的this关键字指向该factory函数中定义的Backbone对象。

 

下面介绍extend方法,extend方法常见于大多数的JavaScript类库中,来实现继承父类创造子类。关于继承的文章,请看我的这篇文章JavaScript面向对象之我见,这里直接介绍源码了。

而后将所有Backbone对外的提供的构造函数的extend属性都指向上文的extend函数,这样大家都有了派生子类的功能。

以上就是本文的主要内容,稍后将为大家带来Model与Collection的解析。