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

标签 javascript properties internet-explorer-10

我正在尝试构建一个包含 Canvas 上下文对象的属性值的字符串。我使用的代码适用于我测试过的所有浏览器(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 为空数组。我已在调试器中验证,当进入 for..in 循环时,ctx 确实具有预期的(非功能)属性。这是怎么回事?

最佳答案

代码的问题在于,对于技术上位于 Canvas 对象本身而不是其原型(prototype)上的字段,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] ) );

关于javascript - 查询对象属性适用于除 IE 10 之外的所有浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15008210/

相关文章:

swift - 在 swift 中使读公共(public)写私有(private)变量的不同方法?

css - ie 10 css 3d 变换表现不同

excel - 如何将XML格式的Excel电子表格传递到IE10 + Office 2010?

css - 导航栏在 IE 10 中无法正确呈现

javascript - 如何停止鼠标垂直滚动

javascript - 如何检测代理函数何时被用作构造函数?

javascript - 如何停止在 React 中重新渲染时进行 api 调用?

javascript - 窗口加载后如何分配变量值

c# - 只读虚拟属性 - 无法更改其值

javascript - Vue.js 中相互依赖的属性