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

时间:2013-02-21 17:08:35

标签: javascript properties internet-explorer-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循环时确实具有预期(非功能)属性。发生了什么事?

1 个答案:

答案 0 :(得分:1)

代码的问题是ctx.hasOwnProperty(prop)在IE10中返回false,用于技术上在canvas对象本身而不是其原型的字段;(这对我来说似乎是个错误。我'我不确定它是否仅适用于画布,或者是否也适用于其他元素。

我已更新您的代码,现在在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] ) );