1

我已经弄清楚了这段代码

function getAllProperties(obj){
    var result={
        properties:[],
        methods:[]
    };
    var proto = obj;
    while(proto !== null){
        var props = Object.getOwnPropertyNames(proto);
        props.forEach(function(v){
            typeof proto[v] === "function" ? result.methods.push(v) : result.properties.push(v);
        });
        proto = Object.getPrototypeOf(proto);
    }
    return result;
}

而我传入的参数是canvas上下文对象(通过canvas.getContext('2d')获取)。码字用Chrome就好了。但结果是 Firefox 得到 'Illegal operation on WrappedNative 原型对象' Error 。谁能告诉我它有什么问题?

4

1 回答 1

0

当您编写 proto[v] 时,您实际上可能会在没有实际实例上下文的情况下调用属性访问器函数(例如,如果该属性已根据 HTML5 使用 get/set 定义)。这会导致错误。

尝试在Object.getOwnPropertyDescriptor不实际调用它的情况下访问该属性。结果可能具有在您访问字段时实际调用的 value 属性或 get/set 属性。

于 2012-04-24T14:24:23.043 回答