var extend = function(protoProps, staticProps) {
var parent = this;
var child; if (protoProps && _.has(protoProps, 'constructor')) {
child = protoProps.constructor;
/* 重写够构造器函数 */
} else {
child = function(){ return parent.apply(this, arguments); };
}
/*定义child是子类的构造器函数*/ _.extend(child, parent, staticProps);
/* 扩展 child的静态属性和方法,这里默认所有子类有extend静态方法,理解for(var i in function) */ var Surrogate = function(){ };
/* 在 new的时候重写constructor属性 */ Surrogate.prototype = parent.prototype;
/* 即使这里的constructor被污染了也没有关系,拿到父类prototype的所有方法 */ child.prototype = new Surrogate();
/*因为 prototype之后 child.prototype.constructor指向child ,这里必须是new一下 ,克隆child对象 */ if (protoProps) _.extend(child.prototype, protoProps);
/*最后一步 添加子类的方法到 child的prototype上*/ child.__super__ = parent.prototype; return child;
/*返回子类构造器函数*/
}; Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;
/*给Backbone.Model,Backbone.Collection, Backbone.Router,Backbone.View添加extend静态方法。 函数是对象,此处引用*/

  

backbone extend 源码分析的更多相关文章

  1. Backbone.js源码分析(珍藏版)

    源码分析珍藏,方便下次阅读! // Backbone.js 0.9.2 // (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. // Backbone ...

  2. Backbone源码分析(三)

    Backbone源码分析(一) Backbone源码分析(二) Backbone中主要的业务逻辑位于Model和Collection,上一篇介绍了Backbone中的Model,这篇文章中将主要探讨C ...

  3. Backbone源码分析-Backbone架构+流程图

    作者:nuysoft/高云/nuysoft@gmail.com 声明:本文为原创文章,如需转载,请注明来源并保留原文链接. Backbone0.9.1源码分析分析系列 jQuery1.6.1源码分析系 ...

  4. Backbone.js 0.9.2 源码分析收藏

    Backbone 为复杂Javascript应用程序提供模型(models).集合(collections).视图(views)的结构.其中模型用于绑定键值数据和自定义事件:集合附有可枚举函数的丰富A ...

  5. Backbone源码分析(一)

    距离上一篇博客有一段时间了,期间各种琐事萦绕.最主要的一件是,当我差不多将整个dojo核心源码看完,惊讶的发现dojo1.*的设计以是老态龙钟之象,而我沉溺在dojo中太久,已经不知道前端世界变成了什 ...

  6. jQuery.extend()方法和jQuery.fn.extend()方法源码分析

    这两个方法用的是相同的代码,一个用于给jQuery对象或者普通对象合并属性和方法一个是针对jQuery对象的实例,对于基本用法举几个例子: html代码如下: <!doctype html> ...

  7. Backbone Model 源码简谈 (版本:1.1.0 基础部分完毕)

    Model工厂   作为model的主要函数,其实只有12行,特别的简练 var Model = Backbone.Model = function(attributes, options) { va ...

  8. ABP源码分析十二:本地化

    本文逐个分析ABP中涉及到locaization的接口和类,以及相互之间的关系.本地化主要涉及两个方面:一个是语言(Language)的管理,这部分相对简单.另一个是语言对应得本地化资源(Locali ...

  9. jQuery 2.0.3 源码分析 Deferred(最细的实现剖析,带图)

    Deferred的概念请看第一篇 http://www.cnblogs.com/aaronjs/p/3348569.html ******************构建Deferred对象时候的流程图* ...

随机推荐

  1. @JSON(serialize=false),过滤不需要的变量

    @JSON(serialize=false),过滤不需要的变量   在用struts2返回json类型的数据时,json会自动转换需要转换成json形式的变量,如果哪个变量不需要的话,则可以在该变量的 ...

  2. java开源网站

    1.http://www.java1234.com 2.http://www.2cto.com/Soft/

  3. 关于EnumerateObjectsUsingBlock和for-in之间的较量

      遍历一个数组看谁快 参赛选手 ForLoop, For - in, enumerateObjectsUsingBlock这个三个方法: NSMutableArray *test = [NSMuta ...

  4. Video Codecs by FOURCC 视频格式编码

    FOURCC Name Summary 1978 A.M.Paredes predictor This is a LossLess video codec. >>> 2VUY 2VU ...

  5. for循环下九九乘法表

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. [转] - linux下socket编程实例

    一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.socket也有一个类似于打开文件 ...

  7. IOS 今天学到太多的知识了,赶快记录下来

    TabBarController 修改tabbar的背景颜色和选中时候的颜色: func application(application: UIApplication, didFinishLaunch ...

  8. npm 国内淘宝镜像cnpm

    某些插件很奇怪,需要用国内的镜像下载才可以 #安装淘宝镜像npm install cnpm -g --registry=https://registry.npm.taobao.org #使用淘宝镜像下 ...

  9. [转]C# WinForm动态调用远程Web服务

    本文转自:http://blog.csdn.net/muyangjun/article/details/7930871 1.添加服务引用 2.在弹出的添加服务引用对话框地址栏中输入WebService ...

  10. IOS第五天(1:取消按钮的监听和设置代理textField字数限制)

    ***********取消按钮的监听和设置代理textField字数限制 UITextFieldDelegate #import "HMViewController.h" @int ...