深入理解JS原型与原型链

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

内容简介:*

函数的 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原型与原型链》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Hit Refresh

Hit Refresh

Satya Nadella、Greg Shaw / HarperBusiness / 2017-9-26 / USD 20.37

Hit Refresh is about individual change, about the transformation happening inside of Microsoft and the technology that will soon impact all of our lives—the arrival of the most exciting and disruptive......一起来看看 《Hit Refresh》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码