文章目录
一、什么是构造函数的原型对象
1.什么是构造函数
构造函数是一种特殊的函数,要用来初始化对象,即为对象成员变量赋初始值,它总是和new运算符一起使用,我们可以将对象中的一些公共的属性和方法抽取出来,然后封装到这个函数里。
在构造函数中,其属性和方法我们称为成员。同时根据添加的方式不同,成员又分为:实例成员和静态成员。
静态成员:在构造函数本身上添加的成员【静态成员只能通过构造函数来访问,不能通过实例化对象访问】
实例成员:就是构造函数内部通过this添加的成员,uname,age,sing就是实例成员【实例成员只能通过实例化对象来访问,不可以通过构造函数类访问】
2.构造函数原型:prototype
其作用就是共享方法。
【一般我们的公共属性和定义到构造函数里面,而公共方法定义在原型对象身上。】
二、什么是对象的原型对象?
每一个对象都有一个属性__proto__指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,是以为对象有__proto__的存在.
- __proto__对象原型和原型对象prototype是等价的
- __proto__对象原型的意义在于对象的查找机制提供了一个方向,或者说一个路线,但它是一个非标准属性,因此在开发过程中不可以使用这个属性,他只是内部指向原型对象的prototype
实例对象与原型对象的关系
三、什么是原型对象的原型对象
原型对象的原型对象:原型对象本身也是一个对象,所以它也有自己的原型对象
(1)获取原型对象的原型对象:构造方法名.prototype._ proto _
(2)获取原型对象的原型对象的构造方法: 构造方法名.prototype._ proto _.constructor
四、如何通过原型链来实现类的继承?
什么是原型链?
每个对象都可以有一个原型_proto_,这个原型还可以有它自己的原型,以此类推,形成一个原型链。查找特定属性的时候,我们先去这个对象里去找, 如果没有的话就去它的原型对象里面去,如果还是没有的话再去向原型对象的原型对象里去寻找… 这个操作被委托在整个原型链上, 这个就是我们说的原型链了。
原型链结构图
ES5通过构造函数
//通过构造函数创建父类
function father(name) {
// 对象属性
this.name = name;
}
//父类的原型方法
father.prototype.getName=function(name){
return '我的名字叫:' + this.name;
}
//子类
function Child(name){
father.call(this,name)
}
Child.prototype=new father();
var z = new Child("张三");
console.log(z.getName(name));
ES6通过class方法
//通过class方法创建父类
class point2{
constructor(name,age){
this.name=name ;
this.age=age;
}
}
//创建子类并继承父类
class sexpoint2 extends point2{
constructor(name,age,sex){
// 在子类型构造函数中通过super调用父类型的构造函数
super(name,age);
this.sex=sex
}
//构造函数上的原型方法
toSex(){
return "名字:"+this.name+" 年龄:"+this.age+" 性别:"+this.sex
}
}
let sext=new sexpoint2("张三",18,"男")
console.log(sext.toSex());
console.log(sext.name);
console.log(sext.age);
console.log(sext.sex)