2017-06-12 6 views
0

このJavascriptをプロキシ、あなたのターゲットの内側からのハウツートリガトラップ

var t = function() { 
    self = this; 
    this.a = "abc"; 
    someFunc: function() { 
     self.a = "def"; 
    } 
} 

target = new t(); 

var p = New Proxy(target, { 
    set: function(){ 
     //this will never be called when the someFunc changes the a field. 
     } 
}) 


p.someFunc(); 

のようなセットをJavaScriptでプロキシを作成する場合は、「トラップ」私は、これがなぜ起こるか理解し問題はないが、どのようにすべきと呼ばれることはありません1つはそのような状況を解決する?

一つの解決策は、トンのオブジェクトを使用して人のために非常にobviouse、いない外部に自己varialeを公開し、「誰かが」プロキシにそれを変更できるようになり

....

他の方法はあります? 私はプロキシを悪用していますか?

+0

"* 1つの解決方法は、自己バリエールを外部に公開することです*" - [あなたは既にそれを行います](http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals.html )? 'var'を追加してください! 'someFunc:'や 'New'のような他の構文エラーも修正してください。 – Bergi

答えて

0

ソリューションは、すべてのselfを使用しないで次のようになります。

function T() { 
    this.a = "abc"; 
    this.someFunc = function() { 
     this.a = "def"; // `this` in the method (usually) refers to the proxy 
    }; 
} 

var p = new Proxy(new T, { 
    set: function(target, key, value, receiver) { 
     console.log(key, value); 
     return Reflect.set(target, key, value, receiver); 
    } 
}); 
p.someFunc(); 

someFuncはプロキシを使用しない場合は、あなたがあなたのTを書き換えずにそれを強制することはできません。

+0

これはおそらく、ここでは「問題」です。someFunctはプロキシについて何も知らないし、それもどちらでもないはずです。それは私が推測するプロキシコンセプトの一部です。 – PEtter

+0

@ PEtterさて、あなたの[実際の問題](https://meta.stackexchange.com/q/66377)はどうなっていますか? – Bergi

関連する問題