2017-05-08 23 views
0

JavaScriptのProxyオブジェクトを使用して、クラスのインスタンスへのプロパティアクセスをトラップするget()ハンドラを作成しています。プロキシまたはターゲットからプロキシゲッターが呼び出されているかどうかを検出する

私は、プロキシがクラス内のメソッドによって呼び出されているのか、プロキシ自体によって呼び出されているのかによって、異なる動作をしたいと思います。

これは可能ですか?

EDIT:うまくいけば、私は何をしようとしている説明のいくつかのサンプルコード:

class Something { 
    constructor() { 
    this.prop1 = 'val1'; 
    this.prop2 = 'val2'; 
    } 

    getProp() { 
    return this.prop1; 
    } 
} 

const instance = new Something(); 

const proxiedObject = new Proxy(instance, { 
    get: function(target, property, receiver) { 
    if (WHATEVER_IS_ACCESSING_THIS_IS_NOT_AN_INSTANCE_METHOD) { 
     return false; 
    } 
    else { 
     return target[property]; 
    } 
    } 
}); 

console.log(proxiedInstance.getProp()); // 'val1' 
console.log(proxiedInstance.prop1);  // 'false' 
+0

'get'トラップ(プロキシではありません)が呼び出されていますか? – Bergi

+0

ほとんどすべてがプロキシで可能ですが、私はあなたが必要とするものが本当に理解できません。いくつかの例(疑似)コードと期待される出力を投稿してください。 – Bergi

+0

@Bergiにサンプルコードを追加しました。 – jdelman

答えて

1

私は彼らがプロキシにアクセスされたときに、最も簡単な解決策はbindにすべての方法だろうと思い、どのアクセスするようにthisにも、プロキシ経由で行くことはありません。もちろん

const proxiedObject = new Proxy(instance, { 
    get: function(target, property, receiver) { 
    const val = target[property]; 
    if (typeof val == "function") // you need this anyway for `proxiedObject.getProp()` 
     return val.bind(target); 
    else 
     return false; 
    } 
}); 

その実行中にプロキシがtransparとなるようgetProp法(またはその他の方法)をラップする他の方法がたくさんありますプロパティアクセスのためのent。

関連する問題