Javascript的4种继承方法

虽然Javascript没有给出继承的关键字,但是我们仍然可以采取一些好的方法来实现它。

1。原型链继承:

复制代码代码如下所示:

var =函数()

{

this.level = 1;

this.name =基地;

this.tostring =函数(){

返回基;

};

};

base.constant =常数;



var =函数()

{

};

sub.prototype =新基地();

Sub.prototype.name = sub;



优势:从instanceof关键字,一个实例是实例父类和子类,一个似乎是最纯粹的继承的实例。

缺点:子类,不同于父类的属性和方法必须在sub.prototype =新基地进行();在这样的陈述是分开进行的,它们不能被包装成子构造函数。例如,sub.prototype.name =子;多重继承无法实现。

2。继承建设:

复制代码代码如下所示:

var =函数()

{

this.level = 1;

this.name =基地;

this.tostring =函数(){

返回基;

};

};

base.constant =常数;



var =函数()

{

base.call(本);

this.name =子;

};



优点:它可以实现多重继承,可以处理构造函数中特定于属性的设置。

缺点:使用实例,对象不是父类的一个实例。

三.例如继承:

复制代码代码如下所示:

var =函数()

{

this.level = 1;

this.name =基地;

this.tostring =函数(){

返回基;

};

};

base.constant =常数;



var =函数()

{

var实例=新的基();

instance.name =子;

返回实例;

};



优点:它是父类的对象,通过使用新构造对象而不使用新构造对象,可以得到相同的效果。

缺点:生成的对象本质上是父类的实例,而不是子类的对象;它不支持多重继承。

4。复制继承:

复制代码代码如下所示:

var =函数()

{

this.level = 1;

this.name =基地;

this.tostring =函数(){

返回基;

};

};

base.constant =常数;



VaR子=功能()

{

var基础=新基();

为(var I在基)

我sub.prototype { } =基{我};

sub.prototype {名字=子;

};



优点:支持多重继承。

缺点:效率低;无法得到父类的不可数的方法。

这些表单中的每一个都有其自身的特性,并且仅根据我提供的代码来满足以下形式:



2012-1-10:补充,如果我们不需要类的继承,我们只需要继承。我们可以用object.create实现浏览器支持ECMAscript 5。

复制代码代码如下所示:

var =函数()

{

this.level = 1;

this.name =基地;

this.tostring =函数(){

返回基;

};

};

base.constant =常数;



VaR子= object.create(新基地());

sub.name =子;