如何在JavaScript中处理Object.prototype

时间:2018-07-21 19:34:45

标签: javascript ecmascript-5

我看到了JavaScript的文档,并且阅读有关: Object.prototype ,他们在文档中评论说:

  

Object.prototype属性表示对象原型对象。

好的,我了解可以用这种方式创建对象:

var o = new Object();

但是这是什么意思:

**属性表示对象原型对象**

好的,我知道什么是对象:

  

Object构造函数创建一个对象包装器。

我的问题是:

这是什么意思?

  

Object.prototype属性表示对象原型对象。

在研究的过程中,我也看到了有关原型的信息,这个原型术语与这个Object.prototype相同吗?:

  

为其他对象提供共享属性的对象

here I saw that

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

2 个答案:

答案 0 :(得分:2)

JavaScript使用creational Prototype pattern。为简化起见,每次调用new Object()Object.create时,从技术上来说都是在克隆原型对象。 Object.prototype仅保留对原型对象的引用。

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

答案 1 :(得分:0)

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

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!