JavaScript面向对象的示例分析
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍JavaScript面向对象的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JavaScript原型链每一个对象都有原型,指向另一个对象,另一个对象也有
千家信息网最后更新 2025年11月07日JavaScript面向对象的示例分析
这篇文章主要介绍JavaScript面向对象的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
JavaScript原型链
每一个对象都有原型,指向另一个对象,另一个对象也有自己的原型,就这样由原型的原型构成的链条就叫原型链。
原型链的尽头
如果一个原型链是,没用尽头的,那么在查找一原型链上不存在的属性时,就会一直查找下去,存在死循环了。显然不是这样的,那么原型链的尽头是什么?
Object的原型
顶层原型
看代码~
// obj字面量创建方法类似于 new Object()// 那么 obj对象就是Object的一个实例,也就是说obj.__proto__ === Object.prototypevar obj = { name: "fzb",};// 那么obj.__proto__ 或者 Oject.prototype 的__proto__ 是什么? 答案是: nullconsole.log(obj.__proto__); // [Object: null prototype] {}console.log(obj.__proto__.__proto__); // null[Object: null prototype] {}的特殊之处:
1、该对象存在原型属性,只是原型指向了null,就是已经是顶层原型了。
2、该对象上还存在许多其他的方法,只是不可枚举,看不到。
创建Object对象的内存图
上方例子的内存图
Object是所有类的父类
原型链最顶层的原型对象就是Object的原型对象
例子:
function Student(sno, name) { this.sno = sno; this.name = name;}const stu = new Student(201801, "fzb");console.log(stu); // Student { sno: 201801, name: 'fzb' }console.log(stu.__proto__); // {}console.log(stu.__proto__.__proto__); // [Object: null prototype] {}console.log(Student.__proto__); // {}/* ***************后面将具体讲解注释内容*************** * 为什么不是 Student.__proto__ = [Object: null prototype] {} * 是因为 Student.__proto__ = Function.prototype * Function.prototype.__proto__ = Object.prototype = [Object: null prototype] {} * ***************后面将具体讲解注释内容*************** */console.log(Student.__proto__.__proto__); // [Object: null prototype] {}内存图:
原型链实现继承
继承可以重复利用代码,子类可以使用
例子:
function Person() { this.name = "fzb";}Person.prototype.running = function () { console.log(this.name + "正在跑步~");};function Student(sno) { this.sno = sno;}Student.prototype = new Person();// 重写整个原型对象之后,要重新配置 constructorObject.defineProperty(Student.prototype, "constructor", { configurable: true, enumerable: false, writable: true, value: Student,});Student.prototype.studying = function () { console.log(this.name + "正在学习");};const stu = new Student(201801);stu.running(); // fzb正在跑步~stu.studying(); // fzb正在学习内存图:
缺陷
1> 在打印子类对象时,有些属性本应该打印出来的,但是因为在父类上,无法打印出来。
2> 多个子类对象在进行某些操作时,会出现相互影响。
// 在上方例子上,加一点点代码,function Person() { this.name = "fzb"; this.friends = []; // 增加一个属性}const stu1 = new Student(201801);stu1.friends.push("zzw");const stu2 = new Student(201801);console.log(stu2.friends); // [ 'zzw' ]// stu2上取到了stu1的friends属性,这是不可以的3> 无法传递参数,有些属性存在父类构造函数内,子类实例化时,初始化参数无法传入到父类。
借用构造函数实现继承
在子类构造函数内,调用构造函数。使改变父类构造函数内的this指向,然后父类在this上添加的属性就会在子类实例化的对象上。
function Person(name) { this.name = name; this.friends = [];}Person.prototype.running = function () { console.log(this.name + "正在跑步~");};function Student(sno, name) { Person.call(this, name); // 添加代码 this.sno = sno;}Student.prototype = new Person();// 重写整个原型对象之后,要重新配置 constructorObject.defineProperty(Student.prototype, "constructor", { configurable: true, enumerable: false, writable: true, value: Student,});Student.prototype.studying = function () { console.log(this.name + "正在学习");};const stu1 = new Student(201801,"stu1");stu1.friends.push("zzw");const stu2 = new Student(201802,"stu2");console.log(stu2.friends); // []这时原型链实现继承的三个弊端,就解决的。但是又出现了新的缺陷。
缺陷
1> 父类构造函数至少执行了两次以上
2> 子类构造函数的原型对象是父类的实例对象,那么个对象上的属性将会是undefined
以上是"JavaScript面向对象的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
原型
对象
属性
函数
子类
正在
代码
例子
内存
内容
实例
就是
指向
缺陷
顶层
学习
示例
分析
参数
只是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机网络技术工资低
思科网络技术学院路由器配置
软件开发或者数据处理
有关数据库的试题
网络安全与执法月薪
日本mapple服务器
扣字软件开发
欢乐会网络安全专家
2k21老是联不上服务器
中文百科集团网络技术有限公司
未转变者如何进入rust服务器
云桌面服务器信创
计算机网络技术电子教材
信息软件开发质量管理制度范本
PS与网络技术有关系吗
海淀区管理软件开发怎么样
csgo本地服务器延迟大
网络安全与管理考试答题
襄阳公司 网络技术支持
2021配音秀服务器总崩溃
网络安全抓肉鸡
portal服务器配置
杭州租赁监管软件开发定制
无锡信息软件开发代理商
服务器iis网站管理
公司服务器怎么上云安全
软件开发优秀员工自我评估
电信服务器中有哪些模块
服务器知识
短机架服务器