对象与其原型之间的差异

Difference between an Object and its Prototype

本文关键字:之间 原型 对象      更新时间:2023-09-26

为什么:

console.log(Object.hasOwnProperty("hasOwnProperty"));   

返回false,但是:

console.log(Object.prototype.hasOwnProperty("hasOwnProperty"));  

返回一个真实的陈述?

我知道hasOwnProperty是Object中预先构建的方法,但我想我的问题是Object和Object的原型之间有什么区别
它们不是一样的吗
当我们在第一行代码中引用Object时,我们不是在上面的第二行代码中指的是同一行代码吗?

EDIT:修复了来自以下的2行以上代码

console.log(Object.hasOwnProperty);

和:

console.log(Object.prototype.hasOwnProperty);  

Object.hasOwnPropertyObject.prototype.hasOwnProperty都引用相同的函数。Object.prototype将该函数包含为自己的属性,而Object将其包含为继承的

因此,换句话说,hasOwnProperty函数是在Object.prototype对象上定义的(作为一种方法)。然后,Object构造函数(像几乎所有其他本机对象一样)从Object.prototype继承(所有方法)。

顺便说一句,Object的继承链(原型链)是:

Object -> Function.prototype -> Object.prototype -> null

因此,Object继承了Function.prototypeObject.prototype的所有方法。

我意识到hasOwnProperty是Object中预先构建的方法。

实际上,它是所有JavaScript对象继承的对象的不可枚举属性上的函数。这包括Object函数对象。

但我想我的问题是Object和Object的原型之间有什么区别。它们不是一样的吗?

不,他们绝对不是。EcmaScript规范的语言概述中关于对象的部分很好地描述了它。每个对象都有一个隐藏的[[prototype]]链接,链接到它从中继承的对象(直到null),从而构建了查找属性的"原型链"。函数的公共prototype属性与之不同——它指向该函数构造的所有实例将从中继承的对象。