以下是个人理解,欢迎大家一起讨论。

目录

  • object.prototype是什么?
  • 为什么要有object.prototype?
  • object.prototype应该在哪些场景使用?
  • 引用

object.prototype是什么?

根据MDN的说明,object.protoType表示object的原型对象。
原型原型,顾名思义,就是用于创建对象的模板,如下图通过new boss这个原型创建了myboss实例。
而原型链反映的是原型的原型,如下图boss的原型是person

如下,以person为原型创建boss实例,boss实例就能获得person原型的属性和方法。

let person = function(name) {this.name = name;this.getName = function(){console.log(this.name)}
};
let boss = new person('boss');
boss.getName() // boss

接着搭建原型链就需要用到object.prototype方法了。

let person = function(name) {this.name = name;this.getName = function(){console.log(this.name)}
};
let boss = function(name, money) {person.call(this, name); // 将老板的姓名告诉person原型this.money = money;
}
// boss原型继承person原型
boss.prototype = Object.create(person.prototype)// 通过prototype将payMoney加入boss原型
boss.prototype.payMoney = function() {console.log(this.money)}let myboss = new boss('myboss',6000);
myboss.payMoney(); //6000// 验证myboss是否在原型链上
console.log(person.prototype.isPrototypeOf(myboss)); // true,在原型链上
console.log(boss.prototype.isPrototypeOf(myboss));

这样就生成了我的老板,他是通过boss这个原型创建的,而boss原型继承了person原型,这就是原型和原型链。

为什么要有object.prototype?

通过刚刚的阅读,想必也有些联想,myboss.payMoney()怎么看起来都和string.split(’’)这么像呢。事实上,他们确实是一样的来源,都是通过原型和原型链形成的。就如我们日常用到的string.split(’’)等方法,特别实用。

在刚刚的代码里也知道prototype返回的是实例的原型,那么就可以通过该方法对原型进行复写、新增等操作,但值得注意的是,原型是实例的模板,如果原型改动了,那么相应的实例也会有改变,这就可能因为原型的更改而造成灾难性后果。

但其意义也是巨大的,功能强大,一处改动,整个软件相关代码都会通过原型链产生相应的效果,恰如MDN在描述中所言。

然而,怎么理解这个通过原型链改变所有对象呢,可以参考下这位大佬的博客:
https://blog.csdn.net/xiaoermingn/article/details/80745117

object.prototype应该在哪些场景使用?

首先也是最后,使用object.prototype要坚守一个重要原则——“Don’t Modify Objects You Don’t Own”。
这样,object.prototype的使用场景只有一个,就是用于修改自己自定义的对象。

引用

https://blog.csdn.net/xiaoermingn/article/details/80745117

https://www.zhihu.com/question/26924011

浅谈对object.prototype的理解相关推荐

  1. 浅谈 我对 技术 的理解

    文章目录 1.浅谈 我对 技术 的理解 1.1 技术 是 什么? 1.2 技术的 两个 核心 构成 要素 1.2.1 知识 层面 1.2.2 智慧 层面(思考 层面) 1.3 技术 很难?学不明白? ...

  2. 浅谈对seo概念的理解

    个人认为与微信一样,搜索引擎有固定的用户群体,有人有流量的地方,就存在商机或者利益,seo的概念就是搜索引擎优化,其目的是在搜索引擎中获得精准用户,获得流量.从更深层次方面看,利用seo做自然排名获得 ...

  3. 浅谈IO及不同的理解

    IO 什么是IO? 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的.单独的程序一般是让系统为它们完 ...

  4. 浅谈面向对象三大特征的理解

    面向对象程序设计(Object Oriented Programming)是把客观世界抽象成一个个的对象,并把对象作为编程的处理主体.Java语言是面向对象的程序设计语言,类和对象是面向对象的核心.类 ...

  5. 浅谈阿里“中台”概念的理解

    https://www.toutiao.com/a6651015208934310414/?tt_from=mobile_qq&utm_campaign=client_share&ti ...

  6. 浅谈我对JCS 的理解

    JCS 是Java 中缓存的一种实现,支持将数据缓存到内存和硬盘中,支持设置缓存对象的有效时长. 我认为可以这么理解JCS:客户端向服务器发出请求,服务器就先去缓存中查一下有没有客户端请求的数据,有则 ...

  7. 浅谈数据库三大范式的理解

    首先声明一下,我的这个回答是个人工作总结,不适合考试答题昂. 欢迎关注我的博客. 前言:数据库设计其实不仅仅限制于三个范式,往下其实还有很多种,但对于大多数人来说,你又不搞科研,不造飞机大炮,掌握三大 ...

  8. 浅谈对js闭包的理解

    闭包就是能够读取其他函数内部变量的函数.由于在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成"定义在一个函数内部的函数".在本质上,闭包是将函数内 ...

  9. 浅谈对dao层的理解

    1.dao层:dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表.某个实体的增删改查. 2.DAO层的抽象: 3.补充 DAO层,全称 ...

最新文章

  1. 皮一皮:当有人在我身边时...
  2. Python+selenium 自动化-切换窗口页签、切换iframe框架。确定页面是否包含iframe方法。
  3. python多维数据划分_【python+机器学习(4)】多维数据的特征选取(RidgeLasso)...
  4. js文章QQ空间分享
  5. 蓝桥杯2018年第九届C/C++省赛B组第二题-明码
  6. 翻译spring4.2官方文档(3)
  7. android 4.4 屏幕方向,Android4.4 增加屏幕旋转功能
  8. [FOI2020]手链强化
  9. Docker基础(二)
  10. ( 方框打勾 java_Java 11手册:Java 11是否在所有正确的方框中打勾?
  11. 谷歌浏览器关闭阅读清单
  12. 【Windows】使用【老毛桃】PE系统进行Windows系统的镜像备份
  13. Base64方式上传文件
  14. 初学者教程:3D打印后期处理
  15. 微软crm 开发笔记 系统配置使用
  16. 常见的服务器架构入门:从单体架构、EAI 到 SOA 再到微服务和 ServiceMesh
  17. Hang Detect 问题分析案例
  18. DOS操作系统、常用DOS命令简介
  19. 苹果app商品定价_iOS 开发_2017苹果内购价格表
  20. 解决setTimeout 计时器重复调用的问题导致执行加速问题

热门文章

  1. 监听软键盘,点击确定让其消失
  2. cartographer保存地图
  3. 薄壁轴承摩擦力矩_等截面薄壁轴承常见三大问题分析
  4. 写程序的一些感想和教训(转载)
  5. 华致酒行登陆A股 启幕酒业流通“铂金时代”
  6. C++ 处理HBITMAP类型的.bmp位图文件, 代码工具
  7. 人事档案管理系统源码 v5.0.0(Thinkphp5.0框架)
  8. 计算机专业什么时候买笔记本,读计算机专业买什么笔记本电脑好
  9. OSG笔记:设置DO_NOT_COMPUTE_NEAR_FAR,手动计算远近平面
  10. android.mk 添加v7_在Android上以命令行方式移植FFmpeg