犀牛书第五版读书笔记——Chapter 9. Classes, Constructors, and Prototypes(第一部分)

来源:互联网 发布:mouldflow软件 编辑:程序博客网 时间:2024/04/27 21:45
1.结合使用new操作符和function(),会创建一个新的对象。完整的过程是这样的:首先new出一个object。然后将function.prototype的所有属性映射到新object上。(注意,不是复制,而是建立了一个映射关系)最后以新object为对象调用function

2.要注意,object本身并没有prototype属性,有prototype属性的是function。但是当function作为构造函数使用时,其prototype的所有属性,都会被映射到object上。但object自身,是没有prototype属性的

3.函数的prototype属性是在其定义时,自动创建和初始化的。初始值是只有一个属性的对象,这唯一的属性是constructor,它反向指向这个函数自身

4.原型的属性并不是从prototype对象复制到新对象上,而是一种映射关系。这有2个很重要的意义,一是使用原型对象会减少内存的开销。二是即使在创建了对象以后再修改原型,修改的结果也会体现在先前创建的对象上

5.读取对象属性的过程。比如读取o.p,首先会查找o对象上是否有p属性,如果没有的话,那么会查找o的prototype对象上是否有p属性。这里要注意,由于prototype自身是一个对象,所以上述的读取过程也是适用的,即会先在prototype对象上查找是否有p属性,然后到prototype的构造函数的prototype对象上查找。这个过程是递归的,直到查找到Object对象

6.写对象属性的过程,则不存在上述的继承现象。比如设置o.p = 23;那么如果o对象有p属性,则将p属性的值设置为23。如果不存在p属性,则创建p属性,并设置为23,而不是再去递归查找prototype对象

7.所有的对象都从它们的构造函数的prototype对象上继承属性。那么它们是如何继承到Object类的属性的呢?这是因为prototype对象自身也是一个对象,它是由Object()构造函数创建的,所以prototype对象自身也从Object.prototype对象上继承了一部分属性