为什么我不能使用 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__)
为什么会这样:
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__)