Javascript 中的对象与原型

Object vs. Prototype in Javascript

我正在尝试理解原型并处理我对其他各种构造的理解带来的一些干扰。

谁能给我解释一下 Javascript 中的 Object 是什么?澄清一下,我知道什么是对象(小写'o'),但不知道对象(大写'O')是什么。我知道在 JS 中创建的任何对象都附加了一个隐藏的原型对象。原型对象既是父对象的属性,也是对象本身,具有可以使用以下命令访问的自己的属性 objectName.prototype;此外,在原型对象的属性中有一个原型对象。对象和原型对象一样吗?如果不是,什么是 Object —— 全局对象? it/they 与 window 对象或全局对象有何关系?

在此先感谢您的帮助。我在互联网上搜索过这个问题的答案,但找不到一个既容易理解又容易理解的答案。虽然我还不到 10 岁,但如果你能像我一样向我解释,我不会感到被冒犯,并且会非常感激你的努力。

I understand that any object that is created in JS has a hidden prototype object attached to it.

基本上是的。每个对象都有一个内部属性,在规范中表示为[[Prototype]],其值只是(对)另一个对象的引用。 另一个对象 是第一个对象的原型。

原型对象本身并没有隐藏,你可以显式设置对象的原型,通过 Object.create:

var foo = {x: 42};
var bar = Object.create(foo);

console.log(bar.x); // 42
console.log(Object.getPrototypeOf(bar) === foo); // true

在这个例子中,foobar的原型。

The prototype object is both a property of the parent object, and an object itself

首先,原型对象不是只有一个。任何对象都可以充当原型,并且有许多不同的原型对象。当我们说 "prototype object" 时,我们实际上指的是具有原型 "role" 的对象,而不是特定 [=81= 的对象]"type"。原型对象与非原型对象之间没有明显区别。

我不太清楚你这里所说的 "property of the parent object" 是什么意思。一个对象不是属性,最多可以是一个属性的值。从这个意义上说,是的,作为原型的对象必须是另一个对象的内部 [[Prototype]] 属性 的值。

但这与两个对象之间的所有其他关系没有太大区别(所以没什么特别的)。在下面的例子中 bar 是一个对象并且也分配给 foo 的 属性:

var bar = {};
var foo = {bar: bar};

Is Object the same as prototype object?

没有

Object 是用于创建对象的(构造函数)函数。 var obj = new Object();var obj = {}; 相同。但是,使用对象文字 ({...}) 更方便,这就是为什么您没有看到 new Object 使用那么多的原因。

对于每个构造函数 C,以下内容成立:

Object.getPrototypeOf(new C()) === C.prototype

C.prototype 属性 的值成为通过 new C.

创建的 C 新实例的原型

Object.prototype其实是Object最有趣的部分,也是最重要的部分。您可能听说过 "prototype chain"。因为原型只是一个对象,所以它自己有一个原型,它是一个对象,等等。这条链必须在某个地方结束。 Object.prototype 是基本上位于每个原型链末尾的值。
有很多原型链,因为每个不是原始值(布尔值、数字、字符串、空值、未定义、符号)的值都是一个对象(包括函数、正则表达式、数组、日期等)。

If not, what is Object -- the global object?

见上文。它不是全局对象,浏览器中的全局对象是 window,虽然每个 JavaScript 环境都必须有一个全局对象,但至少到目前为止,语言中没有标准的方式来引用它(edit: 我想 this 在全局环境中是一种跨平台的方式)。

How does it/they relate to the window object or global object?

真正的唯一关系是:

你可能认为全局对象的原型也是Object.prototype,but that is not necessarily the case


阅读material: