我试图了解如何在javascript中使用object.prototype函数然后我遇到了这段代码。我不明白?
// Poisoning Object.prototype
Object.prototype.bar = 1;
var foo = {goo: undefined};
foo.bar; // 1
'bar' in foo; // true
foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true
foo有属性栏,它在第3行中定义并且值为undefined。请指导为什么foo.hasOwnProperty('bar')
在这种情况下返回false
答案 0 :(得分:4)
JavaScript中的所有对象都来自Object
。所有对象都从Object.prototype
继承方法和属性。
在您的示例中,当您尝试获取foo.bar
时,它在bar
中找不到foo
,因此它将转到foo
的原型并试图在那里找到它。
hasOwnProperty
- 仅检查属于您foo
。
以下是foo
的样子
为了深入理解,您可以阅读本章。
答案 1 :(得分:0)
foo
对象具有bar
属性,因为它从Object
继承,因为bar
已添加到Object原型中。 foo.hasOwnProperty('bar')
返回false,因为foo
未定义bar
,Object
确实如此。
答案 2 :(得分:0)
这简单的goo是foo的直接属性,但要获得bar,它需要遍历原型链。 hasOwnProperty仅检查其直接属性。