我试图完全理解原型是如何工作的。
这是我对原型的定义:
所有对象(除了基本对象)都具有的内置属性,它指向并引用“proto{}”对象,该对象是另一个对象的副本,如果在原始对象中找不到该对象的属性和方法,则可以引用该对象的属性和方法。
那是对的吗?特别是我想知道“是另一个对象的副本”部分 - 这意味着 JS 引擎在内存空间中创建对象 B 的存储副本,对象 A 的原型属性指向该副本以供参考。
现在我的问题是Object.create
:
我的理解是,此方法使使用它的任何对象的原型(或对象本身?)继承(IOW,引用传入对象的副本)传入的另一个对象的属性和方法。
var john = Object.create(Person);
在上面的代码中,john
对象被创建并且它的原型属性指向一个创建的对象,该对象具有对象的方法和属性Person
?或者换句话说,Object.create
复制Person
对象并将其放入原型属性john
指向的内存空间中。这是对正在发生的事情的正确理解吗?
如果是这样,是制作对象('person')的副本的原因,原型john
指向,因为这允许修改属性和方法的值而不覆盖Person
对象中的道具/方法与john
继承相关的原型对象?
我试图打破这一点,以便我可以理解并尽量不要使这个概念过于复杂。
这是我画的一张图片,以进一步说明我目前的理解: