2016-08-02 114 views
5

我试图学习如何在JavaScript中的object.prototype函数,然后我遇到了这段代码。我不明白?JavaScript对象原型中毒

// 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中定义和属性栏具有未定义的。请导的值,那么为什么foo.hasOwnProperty('bar')返回false在这种情况下

+1

最好阅读MDN [关于hasOwnProperty的文档](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty) –

+1

它没有*它*它,它*继承*它。这就是原型的全部意义。 – Bergi

回答

4

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

在您的例子,当你尝试获得foo.bar,它没有找到在foobar,所以它要在foo的原型,并试图找到它。

hasOwnProperty - 只检查属于您的foo的属性。

这是你的foo样子

enter image description here

对于深刻理解,你可以阅读这一章。

You Don't Know JS

0

foo的对象具有属性bar,因为它从Object继承它,因为bar被添加到Object原型。 foo.hasOwnProperty('bar')返回false,因为foo未定义bar,Object

+0

但那里;我们写了'foo.bar',而不是在foo中创建一个名为bar的属性。要创建财产,必须像这样写'foo ['bar']' – ankyAS

+0

@ankyAS不,财产已经存在,但Foo不拥有财产。 Foo从Object继承,因此它获得Object声明的所有属性,包括bar。 – Tibrogargan

0

很简单咕是foo的直接财产,但是要得到禁止,要求遍历原型链。 hasOwnProperty仅检查其直接属性。