1.对象冒充
对象冒充指的是在子类中使用子类的this冒充父类的this去执行父类的构造函数,从而获得了父类的属性和方法,但是这种方式只能继承父类构造函数中定义的属性和方法,原型上的任何属性和方法对子类都不可见:
//使用对象冒充实现继承
function SuperType()
{
this.prop = ["prop"];
this.method = function(){return "method";};
}
SuperType.prototype.protoProp = "proto";
function SubType()
{
//临时方法
this.inherit = SuperType;
//冒充继承
this.inherit();
//删除临时方法
delete this.inherit;
}
var sub = new SubType();
alert(sub.prop); //property,继承父类属性
alert(sub.method()); //method,继承父类方法
alert(sub.protoProp); //undefined,不能继承父类原型的属性
2.原型链继承
使用原型链可以很方便继承父类的属性和方法,但是若父类的属性是引用类型时可能会存在父类或子类的多个实例的相互影响问题,即某个实例改变了属性,可能对另外的实例可见。
//原型链继承
function SuperType()
{
this.prop = ["prop"];
this.method = function(){return "method";};
}
SuperType.prototype.protoProp = "proto";
function SubType()
{
}
//使用原型链继承
SubType.prototype = new SuperType();
var sub = new SubType();