扩展Object的原型在Chrome中有奇怪的行为

时间:2012-09-28 21:05:08

标签: javascript google-chrome prototype-programming prototyping

任何人都可以解释为什么这段代码在谷歌浏览器下表现得如此奇怪:

<script>
console.log({someproperty:'hello'}) ;
Object.prototype.get = function(){} ;
</script>

控制台中打印的对象内容没有“someproperty”,而是具有“get someproperty”功能。
我正在使用Chrome 21.0。

这是预期的吗?这是一个错误吗?

2 个答案:

答案 0 :(得分:1)

我无法解释为什么将Object.prototype.get设置为不同的东西导致这种奇怪的行为,除了该功能几乎肯定是Chrome / Webkit在幕后使用以生成其奇特的对象记录。

可以告诉您它发生的原因,即使您在console.log之后设置了.get,Chrome / Webkit也无法检索到对象,直到您实际单击控制台中的箭头以展开对象。您可以通过运行此jsfiddle来测试:http://jsfiddle.net/BNjWZ/

请注意,如果单击箭头立即展开对象,对象将看起来正常,但如果等待三秒钟,则表示.get = function(){};要被召唤,它将拥有“获得”。

我在22.0.1229.79中看到了这种行为(对象显示中的奇怪&#39; get&#39;以及延迟对象记录)

答案 1 :(得分:0)

预计不会。 规范对属性名称没有限制。因此,'get'是对象属性的合法名称,以及原型对象。

这似乎是控制台的全局dir()函数中的错误。

添加:JQuery在'get'和'set'属性方面存在问题。