首页 > 代码库 > 继承机制实现的方法

继承机制实现的方法

根据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/

 

继承机制实现的方法