绿宝书学习笔记6

3.2.1.2 构造复制?写时复制?还是读遍历?假设每构造一个实例,都从原型中复制出一个实例来,新的实例占用了和原型相同的内存空间,这确实可以使obj1 obj2等与它们的原型“完全一致”,但是也非常的不经济——因为内存的占用会急剧增加 另一个策略来自一种欺骗系统的技术:写时复制。这种欺骗的典型示例就是操作系统中的动态链接库(DDL),它的内存中总是写时复制的,这种机制先指明obj1和obj2与原型的引用关系,系统将这种关系理解为“两个对象都等同于它们的原型”,读的时候直接去读原型,接下来,写对象的属性的时候,我们就复制出原型的映像出来,并使以后的操作指向该映像就行了,优点是:之后第一次写的时候会用一些代码来分配内存,之后就不会有这些开销了,因为访问映像和访问原型的效率是一样的,但是对于经常读写的系统中,这种方法并不比上一种更经济 JS采用第三种方法:把写复制的粒度从整个原型变成了成员。这种方法是:仅当写某个实例的成员时,才将成员的信息复制到实例映像中。这样一来,在读取该对象的时候,仍然和上一种一样,但是在写的时候,实例会产生一个写的属性值,放在实例的成员列表中,所以现在对象仍然是一个
 2020-07-16   语言  js    js  基础  绿宝书