zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    van Emda Boas
    斐波那契堆
    NTT
    FFT
    KDTree
    扩展kmp
    kmp
    Dancing Links
    树的prufer编码
    有向图最小路径覆盖
  • 原文地址:https://www.cnblogs.com/terrylin/p/3336318.html
Copyright © 2011-2022 走看看