0

谁能解释一下为什么这段代码在谷歌浏览器下表现得如此奇怪:

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

在控制台打印的对象的内容没有“someproperty”,而是有一个“get someproperty”,这是一个函数。
我正在使用 Chrome 21.0。

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

4

2 回答 2

1

我无法向您解释为什么将 Object.prototype.get 设置为不同的东西会导致这种奇怪的行为,除了几乎可以肯定 Chrome/Webkit 在幕后使用该函数来生成其花哨的对象日志记录。

可以告诉您,即使您在 console.log 之后设置 .get 也会发生这种情况的原因是 Chrome/Webkit 在您实际单击控制台中的箭头以展开对象之前不会检索该对象。你可以通过运行这个 jsfiddle 来测试它:http: //jsfiddle.net/BNjWZ/

请注意,如果您立即单击箭头展开对象,该对象将看起来很正常,但如果您等待 .get = function(){}; 3 秒钟;被调用,它将有'get's。

我在 22.0.1229.79 中看到了这种行为(对象显示中的奇怪“获取”和延迟的对象日志记录)

于 2012-09-28T21:23:41.723 回答
0

这不是预期的。规范中没有关于属性名称的限制。因此,'get' 是对象属性和原型对象的合法名称。

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

补充:JQuery 的 'get' 和 'set' 属性有问题。

于 2012-09-29T00:05:24.140 回答