查询对象属性适用于除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]));