对象及其原型之间的区别

时间:2013-02-11 17:48:16

标签: javascript object prototype

为什么:

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

返回错误,但是:

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

返回真实的陈述?

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

编辑:修复了以下两行代码:

console.log(Object.hasOwnProperty);

和:

console.log(Object.prototype.hasOwnProperty);  

2 个答案:

答案 0 :(得分:1)

Object.hasOwnPropertyObject.prototype.hasOwnProperty都引用了相同的功能。 Object.prototype将该函数包含为拥有的属性,而Object将其包含为继承的属性。

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

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

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

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

答案 1 :(得分:0)

  

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

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

  

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

不,他们肯定不是。我认为,EcmaScript规范的语言概述中的section on Objects描述得非常好。每个对象都有一个隐藏的 [[prototype]] 链接到它继承的对象(直到null) - 构建查找属性的“原型链”。函数的公共prototype属性不同于它 - 它指向函数构造的所有实例将继承的对象。