本文给出了Javascript继承机制的一个示例,供大家参考,具体分析如下:

继承Javascript初学者的概念是一般人很难理解Javascript语言,它不是子类和类

我花了很多时间学习这一部分,做了很多笔记,但都属于强烈的记忆,不能从根本上理解。

1。如何创建类

假设有类称为人,如下所示:

复制代码代码如下:var = =函数(名称,年龄){

this.name =名称;

this.age =年龄;

}

person.prototype.getname =函数(){

返回this.name;

}

以上:人和地球上所有的人,每个人都有两个基本属性:姓名和年龄;现在我们要实施一个班的学生,然后我们知道;学生是一个人,而学生也有姓名和年龄属性;现在的问题是如何把它变成一种关系呢

首先,看看如何在纯面向对象的语言(例如:actionscrpt3)做

将代码复制如下:类学生扩展个人{ };/很简单,一行代码;相当于一个词——扩展

两。我们怎样才能把它变成js

在解释js继承机制的实现之前,首先要了解js的原型链。

复制代码代码如下:var人=新的人('poised-flw ',21);

(人。getName); / / 将其

它是如何在上述getName()方法进行首先,我们会发现是否有getName方法()在人的功能,没有找到,然后去Person.prototype找出来,然后调用它,不是吗继续沿着相同的方式往下看原型,直到找到一条路或到达原型链的顶端为止!

例如,现在有一个叫做狗的构造函数,它代表了一个狗对象的原型。

复制代码代码如下:函数狗(名称){

this.name =名称;

}

为这个构造函数使用新的,生成一个对象的实例。

复制代码如下:var DOGA =新狗('older);

警报(DOGA。名称); / /蛋

注意构造函数中的这个关键字,它表示新创建的实例对象。

三,新算子的缺点

一个缺点是用构造函数生成实例对象,也就是说不能共享属性和方法。

例如,在狗对象的构造函数中,设置实例对象的公共属性类。

复制代码代码如下:函数狗(名称){

this.name =名称;

this.species =狗;

}

然后,生成两个实例对象:

复制代码如下:var DOGA =新狗('older);

无功dogb =新狗(20分);

这两个对象的物种属性是独立的,其中一个不会影响到另一个对象。

复制代码代码如下:doga.species =猫家族;

警报(dogb。种); / / 犬

每个实例对象都有一个自己的属性和方法的副本,这不仅不能进行数据共享,而且浪费资源。

继承思想:继承机制是通过JS独特的原型链实现的!

四。基于原型链的继承

1。直接继承的实现

复制代码代码如下:var学生=函数(名称,年龄,SID){

person.call(这名字,年龄);

this.sid = Sid;

}

students.prototype =新的(人); / /把人的继承机制的实现原型链上的学生

students.prototype.constructor =学生;

students.prototype.getresults =函数(){

获得学生成绩

}

不降低students.prototype.constructor =学生线!在定义构造函数时,它的默认原型是对象实例,原型的构造函数属性自动设置为函数本身!!!如果你手动设置原型到另一个对象,那么新的对象将不自然的原始对象构造函数的值,所以它需要重置其构造函数等属性:

复制代码如下:var test =函数(){()

this.time =现在;

}

console.log(试验样机); / /对象是一个空的对象

console.log(试验样机。构造函数); / /功能({这个时间)=现在;},和本身的功能

如果手动将原型属性更改为测试

test.prototype = { {

SomeFunc:函数(){

console.log('Hello World!;

}

};

console.log(试验样机。构造函数); / /函数对象({ } } {本地代码)

然后,您会发现,当它手动更改需要将其转换为构造函数的原型属性时,完全错误;

上面的测试知道构造函数值是怎么改变的。

2。封装继承函数扩展

复制代码代码如下:功能的延伸(子类,父类){

Var(f =函数){ };

f.prototype = superclass.prototype;

subclass.prototype =新的f();

subclass.prototype.constructor =子类;

}

事实上,这个函数的功能只是上面的继承过程的包,不同的:

它继承了父类的属性和原型只有不继承属性在父类的构造函数;

这样做的好处是降低了到一个新构造函数的成本!

以下的问题,当然,是不可能允许子类继承父类的所有属性,通过这个函数。

改进uff1a

将代码复制如下:继续在学生构造函数中添加一行代码:

person.call(这名字,年龄);

五、总结

通过使用JS的原型链原理,我们可以很容易地实现js的继承机制,虽然不是很严格,但我的目标是实现:尽可能频繁地重复代码。

希望本文能对大家的javascript程序设计有所帮助。