我已经弄清楚了这段代码
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 属性。