zoukankan      html  css  js  c++  java
  • js最佳继承范型

    先回想下怎么给一个类设置属性:
    1.构造函数 内  通过this
    2.prototype中的属性
    两者的区别就是构造函数中的属性是每个实例私有的,而prototype中的属性是所有实例共有的(一般方法和静态属性会放到prototype中)


    所以咱们要继承类的属性也得继承这两处的属性:
    1.继承构造函数中的属性,这个简单(只需在子类中调用父类的构造函数,同时上下文改成子类的上下文就ok了)
    function sup(name){this.name=name;}
    function  sub(name,age){
         sup.call(this,name);
         this.age=age;
    }

    2.继承原型(最简单的就是将子类的prototype指向父类的实例,这样子类的原型就有父类的所有属性方法)
    sub.prototype=new sup();


    相信大家也容易发现这样做的弊端:
    1.父类构造函数调用了两次
    2.子类的原型上有一些不必要的属性


    哪怎样做才能做到最好的继承呢?
    下面给出目前开发员普遍认为最理想的继承范式(
    会这一种继承范式就够了
    /***只调用一次superClass同时避免了不必要的属性**/
    function clone(obj){
        var F=function(){};
        F.prototype=obj;
        return new F;
    }
    function inheritPrototype(subClass,supClass){
        var prototype=clone(supClass.prototype);
        prototype.constructor=subClass;
        subClass.prototype=prototype;
    }

    function SuperClass(name){this.name=name;}
    function SubClass(name,age){
        SuperClass.call(this,name);
        this.age=age;
    }
    inheritPrototype(SubClass,SuperClass);

  • 相关阅读:
    【洛谷P3649】回文串
    【CH2401】送礼物
    Python 函数
    Python 文件操作
    JS的DOM和BOM
    JavaScript (内置对象及方法)
    JavaScript 基础(数据类型、函数、流程控制、对象)
    Python基础数据类型(数字、字符串、布尔、列表、元组、字典、集合等)
    MySQL(二)
    数据备份 及 Python 操作 Mysql
  • 原文地址:https://www.cnblogs.com/chengzhenping/p/3498424.html
Copyright © 2011-2022 走看看