JavaScript对象原型中毒

时间:2016-08-02 06:15:09

标签: javascript

我试图了解如何在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

3 个答案:

答案 0 :(得分:4)

JavaScript中的所有对象都来自Object。所有对象都从Object.prototype继承方法和属性。

在您的示例中,当您尝试获取foo.bar时,它在bar中找不到foo,因此它将转到foo的原型并试图在那里找到它。

hasOwnProperty - 仅检查属于您foo

的属性

以下是foo的样子

enter image description here

为了深入理解,您可以阅读本章。

You Don't Know JS

答案 1 :(得分:0)

foo对象具有bar属性,因为它从Object继承,因为bar已添加到Object原型中。 foo.hasOwnProperty('bar')返回false,因为foo未定义barObject确实如此。

答案 2 :(得分:0)

这简单的goo是foo的直接属性,但要获得bar,它需要遍历原型链。 hasOwnProperty仅检查其直接属性。