backbone的对象继承实现

通过原型链实现对象的继承,子类通过’__super__‘来访问父类的方法

 1 // protoProps 子类的属性参数
 2 // staticProps 静态属性
 3 var extend = function(protoProps, staticProps) {
 4     var parent = this;
 5     var child;
 6 
 7     // 如果protoProps参数中存在构造函数则使用,否则使用父类的构造函数
 8     if (protoProps && _.has(protoProps, 'constructor')) {
 9       child = protoProps.constructor;
10     } else {
11       child = function(){ return parent.apply(this, arguments); };
12     }
13 
14     // 合并静态属性到子类
15     _.extend(child, parent, staticProps);
16 
17     // 声明一个代理类,构造函数指向子类,不需要调用父类的构造函数
18     var Surrogate = function(){ this.constructor = child; };
19     // 代理类的原型链继承父类的原型链
20     Surrogate.prototype = parent.prototype;
21     // 实例化代理类,并赋值给子类的原型属性,实现父类原型链继承
22     child.prototype = new Surrogate;
23 
24     // 如果有传人protoProps参数,则把传人protoProps参数合并到实例化后的子类原型属性上
25     // 实现子类重写父类属性或方法
26     if (protoProps) _.extend(child.prototype, protoProps);
27 
28     // 把父类的原型属性赋值给子类的’__super__‘属性,
29     // 子类可以通过’__super__‘属性来访问父类的原型链中的方法
30     child.__super__ = parent.prototype;
31 
32     return child;
33 };

 

你可能感兴趣的:(backbone)