-1

我试图完全理解原型是如何工作的。

这是我对原型的定义:

所有对象(除了基本对象)都具有的内置属性,它指向并引用“proto{}”对象,该对象是另一个对象的副本,如果在原始对象中找不到该对象的属性和方法,则可以引用该对象的属性和方法。

那是对的吗?特别是我想知道“是另一个对象的副本”部分 - 这意味着 JS 引擎在内存空间中创建对象 B 的存储副本,对象 A 的原型属性指向该副本以供参考。

现在我的问题是Object.create

我的理解是,此方法使使用它的任何对象的原型(或对象本身?)继承(IOW,引用传入对象的副本)传入的另一个对象的属性和方法。

var john = Object.create(Person);

在上面的代码中,john对象被创建并且它的原型属性指向一个创建的对象,该对象具有对象的方法和属性Person?或者换句话说,Object.create复制Person对象并将其放入原型属性john指向的内存空间中。这是对正在发生的事情的正确理解吗?

如果是这样,是制作对象('person')的副本的原因,原型john指向,因为这允许修改属性和方法的值而不覆盖Person对象中的道具/方法与john继承相关的原型对象?

我试图打破这一点,以便我可以理解并尽量不要使这个概念过于复杂。

这是我画的一张图片,以进一步说明我目前的理解:

在此处输入图像描述

4

1 回答 1

0

不,没有涉及任何内容的复制。只需敲击那部分:

原型:所有对象都具有的内置属性(基础对象除外),它指向并引用“proto{}”对象,该对象是另一个对象的副本,如果在原始对象中找不到该对象的属性和方法,则可以引用该对象的属性和方法.

把事情简单化。

是的,因为有一个直接引用而不涉及其他任何内容,这意味着对原型对象的继承属性的任何更改都将动态地反映在对象中。

于 2018-01-18T20:01:33.450 回答