如何在javascript中吸收对象的所有属性(包括继承一个)



我已经弄清楚了这段代码

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 context object(通过canvas.getContext('2d')获取)。代码字很好 铬 .但是结果是,Firefox 收到"对 WrappedNative 原型对象的非法操作"错误。谁能告诉我它有什么问题?

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

尝试让Object.getOwnPropertyDescriptor访问该属性,而无需实际调用它。结果可能具有访问字段时实际调用的值属性或 get/set 属性。

最新更新