查询对象属性适用于除IE之外的所有浏览器10

问题描述:

我试图构建一个包含canvas上下文对象的属性值的字符串。我使用的是我测试过的所有浏览器的代码,除了IE浏览器10.下面的代码:查询对象属性适用于除IE之外的所有浏览器10

getCanvasInfo : function (canvas) { 
    var props = [], 
     prop, 
     ctx = canvas.getContext('2d'); 
    for (prop in ctx) { 
     if (ctx.hasOwnProperty(prop) && 
      prop !== "canvas" && 
      typeof ctx[prop] !== "function") 
     { 
      props.push(prop); 
     } 
    } 
    return props.sort().map(function (p) { 
     return p + ": " + ctx[p]; 
    }).join("\n"); 
} 

在IE 10(移动和桌面),该if测试似乎排除所有属性,当循环退出时,将props留为空数组。我在调试器中验证了ctx确实在输入for..in循环时具有预期的(非功能)属性。这是怎么回事?

代码的问题是,ctx.hasOwnProperty(prop)在IE10中返回false的技术上在画布对象本身,而不是它的原型的字段;(这看起来像一个错误,我不知道它是否只是在画布或是否存在其他元素。

我已经更新了你的代码,现在类似的结果在IE10和Chrome返回。请参见下面的jsfiddle http://jsfiddle.net/T2yzm/1/

var getCanvasInfo = function (canvas) { 
    var props = [], 
     prop, 
     ctx = canvas.getContext('2d'); 
    for (prop in ctx) { 
     if (prop !== "canvas" && typeof ctx[prop] !== "function") { 
      props.push(prop); 
     } 
    } 
    return props.sort().map(function (p) { 
     return p + ": " + ctx[p]; 
    }).join("\n"); 
}; 

console.log(getCanvasInfo($("canvas")[0]));