原型、原型链 的相关内容讲解
这里prototype表示系统自带的属性,第一句话表示设置了Person的祖先有一个属性Lastname,后面创建person和person1
属性的时候就会继承这个属性值
一个小的例子表示继承的关系
prototype可以将一些对象共有的东西致只写一遍,不同每次都创建一遍
此外,还可以把原型封装起来,这样会更好
上个例子中的constructor是一个系统自带的属性(叫做构造器),他是从prototype继承过来的,并且这个属性是可以更改的,它的内容是构造函数我们可以看一下
浅紫色的代表系统自带的
而另一个属性__proto__的内容是prototype的内容(两个__是隐式命名规则)
一般在开发中如果你不想让同事访问或者改变一个参数,那么就会想这样命名一个参数,js中没有绝对的private
这里是一个修改__proto__的例子,这样ff就可以访问person.prototype里面的值了
这里访问Person.name依然会是sunny,因为这个例子就好像
虽然改变了整个prototype的结构,但是在第二次改变为cherry之前,已经
也就是在被new的时候this{}里面的值就会返回给person,然后再改变成cherry的时候就不会被影响了,所以这压力要考虑执行顺序。
但是如果改变函数语句顺序:
那么person.name就会变成cherry,因为执行顺序变了
但是如果是这样来修改,就能修改成功了
原型链
这是一个原型链,通过prototype这个结点链接,这样的话,son就能访问到lastname,然后其实Grand上面还有一个原型,有一个Grand.prototype=object object是所有原型链的终端
因为new是person的,所以this{}返回给person,
person.__proto__链接的是Person.prototype,所以不变(也就是说Person.prototype除了直接修改,都变不了)
Person不能直接访问sayName
Object.create(原型):
这样的话就能访问到Person中的prototype,但是不能访问到age这个内部数据
而
这样是能都访问到的:
之前有一句话叫:绝大多数对象最终都谁继承自Object.prototype
但是并不是所有对象都是继承自它的,因为存在以下例外:
这样的的话:
obj里面就没有__proto__了
如果手动给他加上__proto__:
但是这样的话
就找不到obj.name了,要访问这个数据只能:
/*************************************************************************************************************/
拓展:
toString()方法:
toString()方法是Object.prototype里面自带的,所以绝大数对象都会有这个方法(除了undefined和null)
这两个不能通过包装类来继承Object的原型,所以访问不了。
数字只能这样访问,而不能:
因为数字里面的‘.’优先级很高,系统会把它认为是小数点(浮点类型),所以会报错
而布尔类型就能直接这样
我们再来详细解析一下:
num.toString()就会出现包装类:
而其实Number的原型里面有一个重写的toString()方法:
而根据原型链,Number的原型里面的__proto__会继承Object的原型:
所以当调用num.toString()方法时会一级一级往上,先调用Number里的这个函数原型
再来实战:
这里调用的肯定是:
这里从object.prototype继承过来的toString方法,如果我想要截断它:
只需要重写这个方法就行了
结果:
下面是一些已经自动重写过的:
最后讲一个小bug:
这是因为js的精度不准的原因,
本文讲解了原型、原型链 的相关内容,更多相关知识请关注php中文网。
相关推荐:
以上是原型、原型链 的相关内容讲解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

本文讨论了React中的使用效应,这是一种用于管理副作用的钩子,例如数据获取和功能组件中的DOM操纵。它解释了用法,常见的副作用和清理,以防止记忆泄漏等问题。

本文解释了React的对帐算法,该算法通过比较虚拟DOM树有效地更新DOM。它讨论了性能优势,优化技术以及对用户体验的影响。

JavaScript中的高阶功能通过抽象,常见模式和优化技术增强代码简洁性,可重复性,模块化和性能。

本文讨论了JavaScript中的咖喱,这是一种将多重题材函数转换为单词汇函数序列的技术。它探讨了咖喱的实施,诸如部分应用和实际用途之类的好处,增强代码阅读

文章讨论了使用Connect()将React组件连接到Redux Store,解释了MapStateToprops,MapDispatchToprops和性能影响。

本文解释了React中的UseContext,该文章通过避免道具钻探简化了状态管理。它讨论了通过减少的重新租赁者进行集中国家和绩效改善之类的好处。

文章讨论了使用DestrestDefault()方法在事件处理程序中预防默认行为,其好处(例如增强的用户体验)以及诸如可访问性问题之类的潜在问题。

本文讨论了React中受控和不受控制的组件的优势和缺点,重点是可预测性,性能和用例等方面。它建议在选择之间选择因素。
