当前位置: 首页 > article >正文

JavaScript之继承

继承

父类与子类

子类是父类的一个子集

比如:人类和医生类,医生类是人类的子集;人类是父类,医生类是子集

父类与子类在特性(属性和方法)上有什么关系

方法:子类对象可以调用父类原型上的方法

//父类:人
function Person(name,age){
    this.name = name;
    this.age = age;
}
Person.prototype.breathe = function(){
    console.log(this.name + " is breathing");
}
//子类:医生
function Doctor(name,age,title){
    this.name = name;
    this.age = age;
    this.title = title;
}
//医生作为人的子类,可以调用人原型上的方法
//实现原型的继承
Doctor.prototype.__proto__ = Person.prototype;
var d1 = new Doctor("zhangsan",20,"doctor");
d1.breathe();//正常调用
Doctor.prototype.__proto__ = Person.prototype;

对象访问自己的原型用__proto__

任何对象都有原型。访问方式都是对象.__proto__

Doctor.prototype时医生类的原型对象

可以通过__proto__的方式访问原型对象的原型

把Person类的原型赋值给医生类原型的原型,产生以下效果

1.人类原型上存在方法breathe,即Person.prototype.breathe()

2.赋值后医生类原型的原型就是人类原型,所以存在方法Doctor.prototype.__proto__.breathe()

3.根据规则,存在Doctor.prototype.__proto__.breathe()就一定存在Doctor.prototype.breathe()

4.Doctor实例化出的对象d1存在

d1.__proto__ == Doctor.prototype    //true

5.根据规则存在d1.__proto__.breathe()就一定存在d1.breathe()

综上,通过Doctor.prototype.__proto__ = Person.prototype;可以实现原型的继承,子类对象可以调用父类原型的方法。

Object类

object类的原型上封装类很多基本的方法,如toString等

console.log(object.prototype);

在声明类是,所有类的圆心都自动继承object的原型

function Person(name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype.say = function () {
    console.log(this.name + ":" + this.age);
}
var p = new Person("zhangsan", 18);
console.log(p.toString());//正常调用

Person类在声明时,原型对象自动继承了object的原型

即Person类自动成为了object的子类

p作为子类对象,可以调用父类原型上的方法,即p.toString()

声明Prog类,继承Person类的原型

function Prog(name,age) {
    this.name = name;
    this.age = age;
}

Person.prototype.work = function () {
    console.log("在工作");
}
程序员原型继承人原型
Prog.prototype.__proto__ = Person.prototype;

Prog类在声明时,原型本来也是继承object的原型

但是人为的篡改了继承方式,Prog原型继承了Person的原型

function JsPro(name,age){
    this.name = name;
    this.age = age;
}
JsPro.prototype.__proto__ = Prog.prototype;

var j1= new JsPro("a",20);
console.log(j1.toString());//正常执行

“孙子类”调用“爷爷类”的方法

类之间通过继承,让原型形成了一条“链子”,成为原型链

注:Object原型的原型指向谁(即Object继承谁)?

答:null(原型链的顶端)


http://www.kler.cn/a/273686.html

相关文章:

  • 麦田物语学习笔记:背包物品选择高亮显示和动画
  • C++【深入底层,从零模拟实现string类】
  • 2025年第三届“华数杯”国际赛A题解题思路与代码(Matlab版)
  • Python爬虫应用领域
  • CTFshow—文件包含
  • [笔记] 使用 Jenkins 实现 CI/CD :从 GitLab 拉取 Java 项目并部署至 Windows Server
  • 【sql】初识 where EXISTS
  • MySQL---索引
  • 第十四届蓝桥杯省赛C++B组题解
  • 【Unity动画】Unity如何导入序列帧动画(GIF)
  • 护眼灯和白炽灯哪个更保护眼睛?四款必选的高口碑护眼台灯
  • 第二十二章 构建和配置 Nginx (UNIX® Linux macOS) - 示例:为特定路径上的所有流量启用 CSP 路由
  • idea2023 运行多 springboot 实例
  • 计算机网络:TCP篇
  • 外贸网站常用的wordpress模板
  • 学习笔记Day8:GEO数据挖掘-基因表达芯片
  • 用JDBC游标的方式导出mysql数据以及springboot打包成exe程序实践
  • 每天一个数据分析题(二百一十六)
  • SpringBoot2.7集成Swagger3
  • AcWing 1510:楼梯 ← 浮点数二分
  • 基于Matlab的视频人面检测识别,Matalb实现
  • CTF 题型 SSRF攻击例题总结
  • Linux/Ubuntu/Debian的终端中和的区别
  • Android学习进阶
  • 3种场景探讨ChatGPT如何改变投资者对测试管理初创企业的看法
  • 【Flask开发实战】防火墙配置文件解析(一)