首页 > 编程语言 >【Web前端】JavaScript 对象原型与继承机制

【Web前端】JavaScript 对象原型与继承机制

时间:2024-10-30 22:20:51浏览次数:8  
标签:Web name 对象 age JavaScript 原型 child 属性

JavaScript 是一种动态类型的编程语言,其核心特性之一就是对象和原型链。理解原型及其工作机制对于掌握 JavaScript 的继承和对象关系非常重要。


什么是原型

每个对象都有一个内部属性 ​​[[Prototype]]​​​,这个属性指向创建该对象的构造函数的原型对象。这个内部属性通常被称为原型链(prototype chain)。原型链是 JavaScript 实现继承和属性查找的基础机制。


原型链的工作机制

原型链是一种用于实现继承的机制。当你访问一个对象的属性时,JavaScript 会首先在对象本身上寻找这个属性。如果在对象本身上找不到这个属性,它会沿着原型链向上查找,直到找到这个属性或者到达原型链的顶端。

代码示例

const person = {
  name: 'Xianyu',
  age: 23
};

const child = Object.create(person);
child.job = 'Student';

console.log(child.name); // Xianyu
console.log(child.age); // 23
console.log(child.job); // Student

示例中 ​​child​​ 对象的原型是 ​​person​​ 对象。当我们访问 ​​child.name​​ 和 ​​child.age​​ 时,JavaScript 会首先在 ​​child​​ 对象上寻找这些属性。如果在 ​​child​​ 对象上找不到这些属性,它会沿着原型链向上查找,找到 ​​person​​ 对象上的 ​​name​​ 和 ​​age​​​ 属性。


设置原型

JavaScript 中有多种方式可以为一个对象设置原型。主要有三种方式:使用 ​​Object.create​​​、使用构造函数和自有属性。

使用 ​​Object.create​

​Object.create​​ 方法是 JavaScript 中为对象设置原型的最常用方式。它允许你创建一个新对象,并指定这个新对象的原型。

const person = {
  name: 'Xianyu',
  age: 23
};

const child = Object.create(person);
child.job = 'Student';

console.log(child.name); // Xianyu
console.log(child.age); // 23
console.log(child.job); // Student

​child​​ 对象的原型是 ​​person​​​ 对象。


使用构造函数

构造函数是另一种为对象设置原型的方式。每个构造函数都有一个 ​​prototype​​ 属性,这个属性指向构造函数的原型对象。

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

const person = new Person('Xianyu', 23);
const child = new person.constructor();
child.job = 'Student';

console.log(child.name); // undefined
console.log(child.age); // undefined
console.log(child.job); // Student

示例中​​child​​ 对象的原型是 ​​Person.prototype​​。


自有属性

自有属性是对象本身上定义的属性,而不是通过原型链继承的属性。自有属性的优先级高于原型链上的属性。

const person = {
  name: 'Xianyu',
  age: 23
};

const child = Object.create(person);
child.name = 'Xianyadan';
child.age = 22;
child.job = 'engineer';

console.log(child.name); // Xianyadan
console.log(child.age); // 22
console.log(child.job); // engineer

​child​​ 对象有自有属性 ​​name​​ 和 ​​age​​​,这些自有属性会遮蔽原型链上的同名属性。


属性遮蔽

属性遮蔽是指自有属性会遮蔽原型链上的同名属性。当你访问一个对象的属性时,JavaScript 会首先查找自有属性,如果找到了,就不会再沿着原型链向上查找。

代码示例

const person = {
  name: 'Xianyu',
  age: 23
};

const child = Object.create(person);
child.name = 'Xianyadan';
child.age = 22;

console.log(child.name); // Xianyadan
console.log(child.age); // 22

示例中​​child​​​ 对象有自有属性 ​​name​​​ 和 ​​age​​,这些自有属性会遮蔽原型链上的同名属性。


原型与继承

JavaScript 通过原型链实现继承。继承是指一个对象可以继承另一个对象的属性和方法。通过设置对象的原型,我们可以实现对象之间的继承关系。

代码示例

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

Person.prototype.sayHello = function() {
  console.log('Hello, I am ' + this.name);
};

function Student(name, age, grade) {
  Person.call(this, name, age);
  this.grade = grade;
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

const student = new Student('Xianyu', 23, 'A');
student.sayHello(); // Hello, I am Xianyu
console.log(student.grade); // A

​Student​​ 构造函数通过调用 ​​Person​​ 构造函数来继承 ​​Person​​ 对象的属性和方法。​​Student.prototype​​ 被设置为 ​​Person.prototype​​ 的一个实例,从而实现了 ​​Student​​ 对象继承 ​​Person​​​ 对象的属性和方法。

标签:Web,name,对象,age,JavaScript,原型,child,属性
From: https://blog.csdn.net/LEECOO666/article/details/143376576

相关文章

  • 568. 蜡笔小新动漫主题 大学生期末大作业 Web前端网页制作 html+css+js
    目录一、网页概述二、网页文件三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐欢迎光临仙女的网页世界!这里有各行各业的Web前端网页制作的案例,样式齐全新颖,并持续更新!感谢CSDN,提供了这......
  • 2024-SHCTF Web WP
    [Week1]1zflask按照提示访问robots.txt,访问/s3recttt得到一个python文件在api路由传参,直接执行命令得到[email protected]('/api')defapi():cmd=request.args.get('SSHCTFF','ls/')result=os.popen(cmd).read()returnresult[Week1......
  • WebProxy
    RouterSrv、AppSrv服务WebProxy安装Nginx组件。创建web.chinaskills.cn站点为www.chinaskills.cn配置代理前端,通过https访问后端Web服务器。配置文件名为proxy.conf,放置在/etc/nginx/conf.d/目录下。后端服务器日志内容需要记录真实客户端的IP地址。缓存后端Web服务器上......
  • 网关登录与web前端本地开发
    网关登录与web前端本地开发场景描述:管理后台和测试环境等服务部署在内网,访问这些资源需要网关验证访问权限;在线上访问这些资源时,会自动跳转要求网关登录,登录完成再重新跳回来。在本地开发时网关拒绝登录跳转。流程分析:在访问需要网关验证的资源时,请求会在cookie中携带权限tok......
  • 猿人学web端爬虫攻防大赛赛题第17题——天杀的http2.0
    题目网址:https://match.yuanrenxue.cn/match/17解题步骤:老方法,看触发的数据包。只有一个数据包,再看cookie中有没有特殊的字段。没有遇到第13题的特殊字段,直接访问。importrequestsurl="https://match.yuanrenxue.cn/api/match/17?page=1"headers={"user-ag......
  • CTF学习(1):WEB(upload)
    1.进入网站(文件上传题?)--->CTRL+U查看源码(无果)--->导入带有一句话木马的.php文件(无法上传非图片文件)2.使用JavascriptSwitch插件关闭网页的js设置后再次上传图片(成功)--->将文件上传后的路径添加进蚁剑(密码为先前上传的.php文件中POST['']内的字符)3.连入服务器后在......
  • 爱码单车队——项目原型设计+概要设计
    作业所属课程班级链接作业要求作业要求链接作业的目标SpeakwithAI的原型设计+概要设计团队名称爱码单车队成员1102201542--曾庆徽成员2102201211--池家益成员3102201302--毛震成员4102201420--林传昊成员5102201425--郑礼鑫成员61022......
  • 566. 火影忍者动漫主题网页 大学生期末大作业 Web前端网页制作 html+css
    目录一、网页概述二、网页文件 三、网页效果四、代码展示1.html2.CSS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐欢迎光临仙女的网页世界!这里有各行各业的Web前端网页制作的案例,样式齐全新颖,并持续更新!感谢CSDN,提供了这么好......
  • Javascript实现的网页版绘图板
    项目简介这是一个基于HTML5Canvas和jQuery实现的简单网页版绘图编辑器。提供了基础的图片编辑功能,包括画笔工具、橡皮擦、亮度/对比度调节等功能。可以用于简单的图片编辑和绘图需求。主要功能1.基础绘图工具画笔工具:支持自定义颜色和大小橡皮擦工具:支持自定义大小撤......
  • javaweb基于SSM开发简单的学生考勤管理系统源码 课程设计 大作业
    作品编号:1127数据库:mysql后端技术:SSM文档资料:无文档......