Javascript原型链与继承
首先,一个obj对象的定义,对象是类的原型。_proto_,我们可以利用这个方法getprototypeof ES5的查询对象的原型,我们判断目标和object.prototype等于证明对象的原型存在的原型,答案返回true,因此我们定义。一个函数(Foo),任何函数有一个原型对象,该函数的原型,我们可以在函数原型的任何属性,在共享属性,可以通过一个新的对象实例化(下面的两个例子将详细介绍)。
函数(富){ }
原型= z = 3;
var obj =新foo();
obj。x = 1;
Obj。Y = 2;
obj。X / / 1
Obj。Y / / 2
obj。Z / / 3
类型obj.tostring; / /功能
(obj值); / / foo { x:1,Y 2,Z 3 }
obj.hasownproperty(Z); / /假
在这里,对对象的原型(_proto_)原型指向foo函数的foo.prototype到object.prototype原型,在原型链的末端是空的,通过hasownproperty看Z属性对象,显示虚假,obj Z属性,但找到原型链,发现foo.prototype所以,OBJ。z = 3,和对象的值)为第一(和toString是Object.prototype,所以任何对象,因为任何对象的原型是Object.prototype这两个属性。除下列特殊情况外,
var obj2 = object.create(空);
obj2.valueof(); / /未定义
object.create()是创建一个空的对象,以及对象的原型指向参数。以下综合的示例说明了如何实现一个类继承另一个类
声明构造函数
功能人(姓名,年龄){
this.name =名称;
this.age =年龄;
}
person.prototype.hi =函数(){
console.log(嗨我,名字是+ this.name + ',我的年龄是这个年龄);
};
人的原型。legs_num = 2;
人的原型。arms_num = 2;
person.prototype.walk =函数(){
console.log(这名字+是步行!;
};
功能学生(姓名、年龄、classnum){
person.call(这名字,年龄);
this.classnum = classnum;
}
创建空对象
student.prototype = object.create(人。原型);
构造函数指定创建对象的函数。
student.prototype.constructor =学生;
student.prototype.hi =函数(){
console.log(嗨我,名字是+ this.name + ',我的年龄+年龄+我这类+,classnum);
};
student.prototype.learns =功能(子){
(这是console.log。姓名+学习+子);
};
/ /宝山对象实例化
var宝山=新学生('bosn ',27,' 3 ');
Bosn.hi(); / /你好,我的名字是博神,我27岁,我的3级
bosn.legs_num; / / 2
Bosn.walk(); / /宝山走!
Bosn.learns('math '); / /宝山是学习数学
构造函数的人和这个学生点实例化的对象(宝山),和对象的原型指向构造函数的原型。
我们用object.create()创建一个空的对象的方法,对person.prototype原型问题的对象,这样我们就可以写出好的可以自己创造studnet.prototype任意属性不影响person.prototype性能,并能承受原person.prototype的性质,因为学生是子类继承人。如果我们写person.prototype = student.prototype直接,他会指向一个对象在同一时间两。Student.prototype添加属性时,该属性将添加到人的原型链。
对于构造函数中的调用方法,这个方法指向新创建的学生的实例化对象,并通过调用实现继承。
student.prototype.constructor =学生。这句话的意思是指定的学生作为一个函数来创建student.prototype对象。如果没有写,对象的功能是人。
实现继承有三种方法。
功能人(姓名,年龄){
this.name =名称;
this.age =年龄;
}
功能学生(){
}
student.prototype = person.prototype; / / 1
student.prototype = object.create(人。原型); / / 2
student.prototype =新的人(); / / 3
第一,刚才提到的,直接将子类和基类的该公司的实例。
第二,只是为了避免这一点,而继承的好实现,让实例先查询子类,如果没有相应的属性,那么查询基类;
第三个,虽然它也实现继承,但是调用人的构造函数。在这个例子中,构造函数有两个参数名称和年龄,但是这第三个类型没有被传输,它们没有被实例化。
以上是本文的全部内容,希望大家能喜欢。