深入理解JS原型与原型链

栏目: IT技术 · 发布时间: 5年前

内容简介:*

函数的 prototype

1. 函数的 prototype 属性

* 每个函数都有一个 prototype 属性,它默认指向一个 Object 空对象 ( 即称为原型对   )

* 原型对象中都有一个属性 constructor ,它指向函数对象。

2. 给原型对象添加属性 ( 一般是方法 )

* 作用: 函数的所有实例对象自动拥有原型中的属性 ( 方法 )

显式原型与隐式原型

1. 每个函数 function 都有一个 prototype ,即显式原型 ( 属性 )

2. 每个实例对象都有一个 __proto__, 可称为隐式原型 ( 属性 )

3. 对象隐式原型的值为其对应构造函数的显式原型的值

深入理解JS原型与原型链

4.内存结构图

深入理解JS原型与原型链

5. 总结:

* 函数的 prototype 属性:在定义函数时自动添加,默认值是一个空 Object 对象

* 对象的 __proto__ 属性: 创建对象时自动添加的,默认值为构造函数的 prototype 属性值

* 程序员能直接操作显示原型,但不能直接操作隐式原型 (ES6 之前 )

原型链

* 访问一个对象的属性时,

  * 先在自身属性中查找,找到返回

* 如果没有,再沿着 __proto__ 这条链向上查找,找到返回

* 如果最终没找到,返回 undefined

* 别名:隐式原型链

* 作用:查找对象的属性 ( 方法 )  ps: 查找变量的属性用 作用域链

1. 原型链(图解)

深入理解JS原型与原型链

2. 构造函数 / 原型 / 实体对象的关系(图解)

深入理解JS原型与原型链

function Foo(){ } 的本质是 var Foo = new Function()

Function = new Funtion()

( 只有这样  它自身的显式原型和隐式原型才是相等的 别的函数没有这个特点 )

实例对象的隐式原型属性 = 构造函数的显式原型属性

所有函数的隐式原型 __proto__ 都应该相等。都等于 Function.prototype

* 因为所有函数都是 new Function() 产生的。

3. 构造函数 / 原型 / 实体对象的关系 2 (图解)

  深入理解JS原型与原型链

原型链补充

1. 函数的显式原型指向的对象默认是空 Object 实例对象 ( Object 不满足 )

深入理解JS原型与原型链

2. 所有函数都是 Function 的实例 ( 包含 Funtion)

深入理解JS原型与原型链

原型链 属性问题

1.( 隐式 ) 原型链是 ( 对象 ) 用来查找属性值的

* 读取对象的属性时:会自动到原型链中查找

2. 设置对象的属性值时,不会查找原型链,直接添加此属性并设置值。

3. 方法一般定义在原型中,属性一般通过构造函数定义在对象身上。   


以上所述就是小编给大家介绍的《深入理解JS原型与原型链》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人人都在说谎

人人都在说谎

赛思·斯蒂芬斯--达维多维茨 / 胡晓姣、张晨、左润男 / 中信出版集团 / 2018-11 / 58

有多少人买了书真正看完了? 你朋友的酒量有他说的那么大吗? 父母是否暗自喜欢男孩儿多于女孩儿? 电影里暴力镜头增多会导致犯罪率升高吗? 种族歧视在现如今的美国还严重吗? 特朗普的胜利有征兆吗,什么促成他赢得了大选? …… 你知道问题的答案吗,直觉会怎样告诉你? 作者赛思·斯蒂芬斯--达维多维茨是一位前谷歌数据科学家和专栏作家。他的研究发现,世界充满了......一起来看看 《人人都在说谎》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具