当前位置:网站首页>原型对象及原型链的理解
原型对象及原型链的理解
2022-08-04 05:26:00 【fcc627】
文章目录
一、什么是构造函数的原型对象
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)
边栏推荐
猜你喜欢
随机推荐
TensorRTx-YOLOv5工程解读(二)
通过&修改数组中的值
力扣:70. 爬楼梯
JS基础--强制类型转换(易错点,自用)
跳转页面实时调用后台接口,更新页面数据
php实现telnet访问端口
7.18 Day23 - the markup language
12、分页插件
利用Jenkins实现Unity自动化构建
代码重构:面向单元测试
Handling List
webrtc中的任务队列TaskQueue
EventBus源码分析
SLSA 框架与软件供应链安全防护
Linux环境下redis的下载、安装和启动(建议收藏)
CentOS7 —— yum安装mysql
再识关联容器
webrtc中的视频编码(一) 视频编码模块轮廓
7.15 Day21---MySQL----Index
关于C#的反射,你真的运用自如嘛?









