根据w3cschool上的描述:共有5中集成方法
1、对象冒充:构造函数ClassA使用this关键字给所有属性和方法赋值,使ClassA构造函数成为ClassB的方法,调用。可实现多重继承。
注意:所有新属性和新方法都必须在删除新方法的代码行后定义,否则会覆盖父类的相关属性和方法,多重继承时存在同名问题。
2、call():function对象的一个方法,它是ECMASript把对象冒充规范化的结果
3、apple():与call类似,第二个参数是数组或arguments(参数对象,两个类中的参数顺序完全一致的话,才可以)
4、原型链:把ClassB的prototype属性设置成ClassA的实例。ClassA的构造函数不能传递参数。
注意:所有新属性和新方法都必须在删除新方法的代码行后定义,否则会覆盖父类的相关属性和方法:因为prototype属性被替换成了新对象,添加了新方法和属性的原始对象将被销毁。
对 ClassB 的所有实例,instanceof 为 ClassA 和 ClassB 都返回 true。对象冒充时不能这样(instanceof是讲类型的,而对象冒充是讲方法的。)。不支持多重继承。
5、混合方式:对象冒充的缺点,每个子类都有与父类相同的方法,这样很占空间;而原型链,子类只是指向父类的方法。但是不能多重继承。所以需要结合起来:对象冒充继承属性;原型链继承方法。
通过对象冒充方式继承时,所有的成员方法都是指向this的,也就是说new之后,每个实例将都会拥有这个成员方法,并不是共用的,这就造成了大量的内存浪费。并且通过对象冒充的方式,无法继承通过prototype方式定义的变量和方法(与我想的一样)
instanceof深入学习
(1)值类型:数值、布尔值、null、undefined。
(2)引用类型:对象、数组、函数。
instanceof为了弥补typeof的不足,作用:实例是否属于某种类型;实例是否属于它的父类型;
新概念:显示原型,隐式原型:新概念,哈哈
真难:http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/