2016-12-31 4 views
1

私はいくつかのJavaScriptコードをデバッグしようとしており、オブジェクトの特定の変数がいつアクセス/実行されたかを知る必要があります。変更されたときではなく、スクリプトが特定の変数に実行されたとき。JavaScriptオブジェクト変数にアクセスするタイミングを検出する方法は?

方法はありますか?

+2

使用ブレークポイントを使用することができます。 –

+0

私はテクスチャを取り、それをステージに描画する外部JSライブラリ(PIXIJS)を使用していますが、私の問題はそれが間違って描画されているため、描画の仕方を知りたいのです。 私のテクスチャを描画するPIXIJSのどの機能がわからないので、私は自分のテクスチャに時計などを入れて、どのようなプロセスがこれをしているのかを特定することができます。 ブレークポイントの使用は、コードが実行されている場所を知っていますが、私はそうではありません – uneatenbreakfast

+0

それはどのように呼び出されているかに依存しますが、カスタム '.valueOf()'や 'toString()'メソッドを使って、 .callee.caller'はvarを評価することによって呼び出されます。 – dandavis

答えて

0

あなたは代わりにこれをやろうとしているのクロームインスペクタでReflect.apply()またはProxy.handler()

const o = { 
 
    abc: function() { 
 
    return 123 
 
    }, 
 
    def: function() { 
 
    return "456" 
 
    } 
 
} 
 

 
for (let [key, value] of Object.entries(o)) { 
 
    if (typeof value === "function") { 
 
    let fn = o[key]; 
 
    Object.assign(o, { 
 
     [key]: function(...args) { 
 
     // do stuff 
 
     console.log(key + " proxy arguments:", args); 
 
     return Reflect.apply(fn, o, args); 
 
     } 
 
    }) 
 
    } 
 
} 
 

 
console.log(o.abc(1, 2, 3), o.def(4, 5, 6));

const o = { 
 
    abc: function() { 
 
    return 123 
 
    }, 
 
    def: function() { 
 
    return "456" 
 
    } 
 
} 
 

 
for (let [key, value] of Object.entries(o)) { 
 
    if (typeof value === "function") { 
 
    Object.assign(o, { 
 
     [key]: new Proxy(o[key], { 
 
     apply: function(o, thisArg, args) { 
 
      // do stuff 
 
      console.log(key + " proxy arguments:", args); 
 
      return args; 
 
     } 
 
     }) 
 
    }) 
 
    } 
 
} 
 
    
 
console.log(o.abc(1,2,3), o.def(4,5,6));

+0

がきれいです。関数 "variables"の場合、これはメソッドをラップするプレーンなoldとどのように違いますか? – dandavis

+0

@dandavis認識されている相違点はありません。 'Proxy'と' Reflect.apply() 'アプローチの両方に含まれています。最初はプロパティを 'Proxy'として割り当て、2つ目は' this'を元のオブジェクトまたは他のオブジェクトに設定して元の関数を呼び出します。 – guest271314

+0

確かに、これは彼が問題のオブジェクトをコントロールしていることを前提としており、サードパーティのライブラリ内のコードがバッキングオブジェクトの代わりにプロキシを使用するように手配することができます。 –

関連する問題