关于hasOwnProperty与__proto__的疑问

function Foo(){};
var foo = new Foo();
console.log(foo.__proto__) 
console.log(foo.hasOwnProperty('__proto__'))

foo明明打印出它的隐式原型属性,为什么foo.hasOwnProperty('__proto__')却返回false
image.png

阅读 1.3k
2 个回答

因为

Object.getPrototypeOf(Object.getPrototypeOf(foo)).hasOwnProperty("__proto__") === true

js里有一句话:万物皆对象
也就是说所有的变量、类、方法等都直接或间接继承自Object(除了null和undefined)
比如:
{} => Object
function => Function => Object
'xxx' => String => Object
123 => Number => Object
[] => Array => Object
所以所有的对象都具有__proto__属性,__proto__属性的值也是一个对象,所以__proto__属性的值也具有__proto__属性

hasOwnProperty方法是获取目标对象的__proto__对象上是否存在对应的key,当然不包括隐式的key

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题