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 };

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值