开发者问题收集

如何在 JavaScript 中使用 Object.prototype

2018-07-21
49

我看过 JavaScript 的文档,我读到过: Object.prototype ,文档中他们评论道:

The Object.prototype property represents the Object prototype object.

好的,我明白我可以通过这种方式创建一个对象:

var o = new Object();

但这是什么意思:

** 属性代表 Object 原型对象**

好的,我知道什么是 Object:

The Object constructor creates an object wrapper.

我的问题是:

您说这个是什么意思:

The Object.prototype property represents the Object prototype object.

在研究时,我还看到了关于原型的这个,这个原型术语与这个 Object.prototype 相同吗?:

object that provides shared properties for other objects

我在这里看到了

我希望我的问题不好,只是我不明白这个术语?

2个回答

Javascript 使用 创建原型模式 。为了简单起见,每次调用 new Object()Object.create 时,从技术上讲,您都是在克隆原型对象。Object.prototype 仅保存对原型对象的引用。

为什么这很重要?因为无论你放在原型上什么都将被克隆。如果你将函数放在原型上,情况会有所不同,你创建/克隆的对象只保存对原型的引用,因此当你更改原型上的函数时,它将反映在所有创建的对象上。但是,如果你指定变量,它们的值将被克隆,因此你创建的每个对象都将拥有自己的值。

CrudaLilium
2018-07-21

Javascript 中的对象可以相互继承。这意味着,如果我们有一个继承了 parent 对象的 child 对象,则可以通过子对象访问父对象的所有属性:

const parent = { age: 37 };
const child = Object.create(parent); // child inherits parent
console.log(child.age); // 37

现在 parent 被称为 child 的原型。现在 Object.prototype 属性是继承链中最上面的父对象,在我们的例子中是:

child -> parent -> Object.prototype

因此,每个对象(以及几乎所有其他对象)都从该属性继承。这意味着,如果您向其中添加某些内容:

Object.prototype.test = "hey!";

所有子对象(所有对象)都会继承它:

console.log({}.test, 1..test, "test".test); // hey, hey, hey!
Jonas Wilms
2018-07-21