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.getContext( '2d')で取得)。コードワードは Chrome で問題ありません。しかし、firefox が「WrappedNative プロトタイプ オブジェクトに対する不正な操作」エラーを受け取ることがわかりました。誰がそれの何が問題なのか教えてもらえますか?

4

1 に答える 1

0

proto[v] を記述すると、実際のインスタンス コンテキストなしでプロパティ アクセサー関数を実際に呼び出すことができます (たとえば、プロパティが HTML5 に従って get/set で定義されている場合)。これにより、エラーが発生します。

Object.getOwnPropertyDescriptor実際に呼び出さずにプロパティにアクセスしてみてください。結果には、フィールドにアクセスしたときに実際に呼び出される value プロパティまたは get/set プロパティが含まれる場合があります。

于 2012-04-24T14:24:23.043 に答える