1

我正在尝试构建一个包含画布上下文对象的属性值的字符串。我使用的代码适用于我测试过的所有浏览器,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这是怎么回事?

4

1 回答 1

1

代码的问题在于,在 IE10 中ctx.hasOwnProperty(prop)返回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] ) );
于 2013-03-07T04:11:25.190 回答