作者 魏楷聪 发布于 2015年01月20日
1) 对象冒充(支持多重继承)
继承的第一种方式:对象冒充2) call方法方式
call方法是Function对象中的方法,因此我们定义的每个函数都有该方法。可以通过调用函数名来调用call方法,call方法的第一个参数会被传递给函数中的this,从第2个参数开始,逐一赋值给函数中的参数。
使用call方式实现对象的继承3) apply方法方式
使用apply方式实现对象的继承可以把 Child 的整个 arguments 对象作为第二个参数传递给 apply() 方法。当然,只有 Parent 中的参数顺序与 Child 中的参数顺序完全一致时才可以传递参数对象。如果不是,就必须创建一个单独的数组,按照正确的顺序放置参数。
4) 原型链方式(无法给构造函数传参数)
prototype对象是个模板,要实例化的对象都以这个模板为基础。总而言之,prototype对象的任何属性和方法都被传递给那个类的所有实例。
与对象冒充相似,子类的所有属性和方法都必须出现在prototype属性被赋值后,因为在它之前赋值的所有方法都会被删除。为什么?因为prototype属性被替换成了新对象,添加了新方法的原始对象将被销毁。
记住:原型链会用另一类型的对象重写类的prototype属性。
使用原型链(prototype chain)方式实现对象继承注意:调用 Parent 的构造函数时,没有给它传递参数。这在原型链中是标准做法。要确保构造函数没有任何参数。
对 Child 的所有实例,instanceof 为 Parent 和 Child 都返回 true。
var child = new Child();
alert(child instanceof Parent); // outputs "true";
alert(child instanceof Child); // outputs "true";
5) 混合方式(推荐)
用对象冒充继承构造函数的属性用原型链继承prototype对象的方法
由于混合方式使用了原型链,所以instanceof运算符仍能正确运行
小试牛刀:
混合方式的运用(完)
网友评论