为什么:
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);
答案 0 :(得分:1)
Object.hasOwnProperty
和Object.prototype.hasOwnProperty
都引用了相同的功能。 Object.prototype
将该函数包含为拥有的属性,而Object
将其包含为继承的属性。
因此,换句话说,hasOwnProperty
函数在Object.prototype
对象上定义(作为方法)。然后,Object
构造函数(与几乎所有其他本机对象一样)从Object.prototype
继承(所有方法)。
顺便说一句,Object
的继承链(原型链)是:
Object -> Function.prototype -> Object.prototype -> null
因此,Object
继承了Function.prototype
和Object.prototype
的所有方法。
答案 1 :(得分:0)
我意识到hasOwnProperty是Object中预先构建的方法。
实际上它是所有 JavaScript对象继承的对象的非可枚举属性的函数。这包括Object
函数对象。
不,他们肯定不是。我认为,EcmaScript规范的语言概述中的section on Objects描述得非常好。每个对象都有一个隐藏的 [[prototype]] 链接到它继承的对象(直到但我猜我的问题是Object和Object原型之间的区别是什么。他们不一样吗?
null
) - 构建查找属性的“原型链”。函数的公共prototype
属性不同于它 - 它指向函数构造的所有实例将继承的对象。