underscore.js的代码十分简洁,一千多行的代码,从头到尾看下来,很少有特别吃力的地方。
当然,也肯定遇到一些问题以及一些在自己看来还不能驾驭的点,这方面,代码注释里加上了@mark或@problem。
而想要看这个库,一方面是工作中有用到,另一方面则是,JQuery一万多行还没下定决心去看。
所以打算先拿这个来练练眼,顺便练练打字速度(敲了1000多行注释呢!)。
这一个库,看了15天,期间还有几天是就看了几行的。
所以,可以下这样一个定论就是,如果是放在空闲的日子,最多一个星期可以看完。
但是,又因为林林总总的原因,时间跨度有点大,乃至时隔50天左右才正式看完,也不得不说,时间都去哪了。

官网文档 —— Underscore.js
官网英文注释炫彩版 —— Underscore.js
我的中文注释黑白版 —— Underscore.js

第一次知道Dean Edwards,是在John Resig的《Pro Javascript Techniques》书中。
书中介绍到这样一个Base.js,也正好,公司实现继承的模式和它几近类似。
书中也介绍到Dean Edwards实现事件绑定的方式,而正巧某一天,看到JQuery的代码中借鉴了这样一个模式,并标注了名字。
所以打算对这个底层面向对象继承的小型类库做一个解析。
花了不少的时间,理解这100行不到的代码。受益匪浅。
说这么多,感觉都没到什么重点上。
其实也就是,站在巨人的肩上,看得更远。

原文介绍 —— Base.js
我的注释版本 —— Base.js

上篇解决了之前的继承中调用uber()的一些问题,此篇可以封装上篇篇尾所述的一些缺陷。声明函数部分是无法封装的。

var create = function () {
    var X = function () {};
    X.inherits(Base);
    return X;
};

通过这个函数获得的构造函数都是同一个。但可以封装剩下两步骤,并构建自己的基类型。
尽管都指向的是函数中的引用,构造函数的名称也都是X,但永远不会是同一个。真是有点无地自容。

阅读全文 »

根据前篇所述的constructor问题,所需做的是找到一个方案记录构造函数的父类型,这方面可以通过闭包或者添加一个属性来标记父类型来解决。

另一个问题则是,当前构造函数创建的实例也拥有同名方法时,它在第一次调用uber()获得的是原型上的同名方法,而当第二次调用时,其调用的同名方法并不属于父类型的原型而是父类型的父类型的原型。

以下是我的解决方案,通过闭包实现了显式设置要调用的方法名来调用父级、乃至最上级的同名方法。

阅读全文 »

工作后,将近半年没怎么动Blog,终于是可以挤出点时间看点书学点更深层次的东西。毕业在即,还有挺多要忙的东西,希望能在五月份把这本书看完吧。闲话不多扯,这本书是John Resig在08年出的,不过里面的内容,自然放到什么时候都是不会过时的。

继承,有很多多种多样的方式,主要还是看需求。研究这部分内容,我是想要获得一个简单的方式,可以调用父类型、乃至父类型的父类型…的同名方法,当然,我在本篇找到了答案。

类式继承内容在这本书第三章节“创建可重用代码”中,里面介绍到三种继承的方式,分别是Douglas Crockford的继承、Dean Edwards的Base库继承、以及Prototype库的简单继承。因为时间关系,先仅对Douglas Crockford的继承做分析。

阅读全文 »