先回想下怎么给一个类设置属性:
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);

js最佳继承范型的更多相关文章

  1. [lua]再版jobSchedule与脚本描述范型

    首先贴上代码 -- CPM:关键路径法(Critical Path Method) jobSchedule = { todos = { -- todo list ... ["finale&q ...

  2. Java范型

    泛型不用考虑对象的具体类型.优点在于,因为不用考虑对象的具体类型所以可以对一类对象执行一定的相同操作:缺点在于,因为没有考虑对象的具体类型所以就不能使用对象自带的接口函数.泛型的最佳用同是实现容器类. ...

  3. JS类继承常用方式发展史

    JS类继承常用方式发展史 涉及知识点 构造函数方式继承 1-继承单个对象 1.1 多步走初始版 1.2 多步走优化版 1.3 Object.create()方式 2-继承多个对象 2.1 遍历 Obj ...

  4. Java数组协变与范型不变性

    变性是OOP语言不变的大坑,Java的数组协变就是其中的一口老坑.因为最近踩到了,便做一个记录.顺便也提一下范型的变性. 解释数组协变之前,先明确三个相关的概念,协变.不变和逆变. 一.协变.不变.逆 ...

  5. 范型方法 & 范型参数 & 范型返回值

    Java范型类 public class FanXingClassTest { public static void main(String args[]){ Test<Integer> ...

  6. 廖雪峰Java4反射与泛型-3范型-4擦拭法

    1.擦拭法是Java泛型的实现方式. 编译器把类型视为Object. * 泛型代码编译的时候,编译器实际上把所有的泛型类型T统一视为Object类型.换句话说,虚拟机对泛型一无所知,所有的工作都是编译 ...

  7. 廖雪峰Java4反射与范型-3范型-1什么是泛型

    1.为什么需要泛型? JDK提供了ArrayList,可以看作"可变长度"的数组: 比数组使用方便 示例1:如果使用ArrayList存储String类型: 需要强制转型 不方便, ...

  8. c#范型

    泛型介绍:范型类和范型方法同事具备可重用性.类型安全和效率,这是非范型类和非范型方法无法具备的. 所谓范型,即通过参数化类型实现同一份代码上操作多种数据类型,范型编程是一种编程范式,它利用“参数化类型 ...

  9. JS对象继承篇

    JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...

随机推荐

  1. 如何用java自带的工具生成证书

    一.keytool的概念 keytool 是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.在 ...

  2. centos6.7设置非root帐户自动登录

    1.在/etc/gdm/custom.conf文件中修改并加入以下这段 [daemon]AutomaticLogin=你的用户名AutomaticLoginEnable=True 2.重启 reboo ...

  3. A:手把手教Wordpress仿站(基础)

    安装源码 需要服务器有php环境(PHP,Mysql,Apeach/Ngnax) 我用的主机宝(环境一键安装工具)   打开后台突然出现这种情况 Briefly unavailable for sch ...

  4. 关于学习angularJS 的一些心得

    从一开始接触到 angularJS 的时候,一头雾水啊. 下面根据学习资料,主要来 阐述一点,关于angularJS学习中需要注意的点 1.angularJS 是可以做到MVC 模式 2.angula ...

  5. [Operate System & Algorithm] 页面置换算法

    页面置换算法是什么?我们看一下百度百科对页面置换算法给出的定义:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必 ...

  6. I() 方法

    I()方法的介绍及使用: http://www.jb51.net/article/51213.htm

  7. 最短JavaScript判断是否为IE6、IE的方法

    常用的 JavaScript 检测浏览器为 IE 是哪个版本的代码,包括是否是最人极端厌恶的 ie6 识别与检测. var isIE=!!window.ActiveXObject; var isIE6 ...

  8. saltstack(主机改名)

    已存在salt中的机器,为了规范,需要将这批主机改名 操作流程:在master把这批机器剔除:然修改这批机器的主机名.在/etc/salt目录下.用mv把minion_id和pki的目录重命名.重启s ...

  9. PYTHON 函数的普通参数

    # 形式参数,还没有赋值的代指参数 def kd(p): print(p) return True #实际参数,只有实际值的参数 ret = kd(") if ret: print(&quo ...

  10. fdatool 设计IIR滤波器

    [B,A] = sos2tf(SOS);K = cumprod(G);k=K(end); [y_out] = filter(B, A, win_up_data, []) .*k;