为什么我不能使用 Underscore 或 lodash 迭代 `performance.timing`?

Why can't I iterate over `performance.timing` using Underscore or lodash?

为什么会这样:

setTimeout(function(){
    var myObj = {
        'hello':'world',
        'more':'things'
    };
    
    _.each(myObj, function(value, key){
        console.log(key, value);
    });
    
    // why doesn't this output anything?    
    _.each(performance.timing, function(value, key){
        console.log(key, value);
    });
    
    // just to make sure we can
    console.log(performance.timing);
},500);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

输出这个:

> hello world
> more things
> PerformanceTiming {}

我希望对象的键和值得到与 myobj 相同的输出。

下划线:http://jsfiddle.net/a43vb7gd/1/
lodash: http://jsfiddle.net/mkxncwax/1/

在 Chrome 43.0.2357.81 和 Firefox 38.0 在 Ubuntu 14.04.2 LTS 上重现。

我唯一能想到的就是宿主对象怪异。 Object.keys(performance.timing) returns 和空数组。如果页面上的 运行 与控制台中的 运行 代码的行为也不同。

因为 performance.timing 只是 PerformanceTiming class 的一个实例。这意味着 performance.timing.__proto__ 等于 PerformanceTiming.prototype.

performance.timing 没有自己的属性,但所有继承自 PerformanceTiming.prototype 的属性。您可以通过以下方式获取其所有属性:

Object.keys(PerfomanceTiming.prototype)

Object.keys(performance.timing.__proto__)