2017-01-15 15 views
2

extendsをトラップすることは可能ですか?クラス内の定義をトラップするには?例:ES6でプロキシ経由でクラス定義をトラップする

  • BA拡張:

    class B extends A { 
        method1() { } 
        static method2() { } 
    } 
    


    トラップにどのような方法は、イベントあり。

  • method1()B.prototype
  • method2()上で定義されていたがB上で定義されました。


既存のメカニズムはどれも動作していないようです。試しましたsetPrototypeOfdefinePropertyトラップ。

+0

これらの事? 'B'はある時点で存在せず、すでに別のものに定義されています。あなたのケースを説明するとおそらく助けになるでしょう。 – estus

+1

トラッピングで本当に解決しようとしている問題は何ですか?私はそれを解決する他の方法があるかもしれないと推測しています。 – jfriend00

+0

ユースケースはなぜ 'defineProperty'を捕まえたいのかと似ています。何かがオブジェクトに定義されているときに自動実行するコードです。 'defineProperty'トラップがトリガされなかったので、私は' extends'がトラップできるかどうかチェックしていました。私はそうでなければ 'extended'をトラップする強いユースケースは持っていません。 – Gubbi

答えて

1

クラスBがクラスAを拡張すると、そのオブジェクトはprototypeになります。だから、getにトラップを持つプロキシを定義し、アクセスされているプロパティが"prototype"であるかどうかを調べることができます。あなたがトラップしたいです

class A {} 
 

 
PA = new Proxy(A, { 
 
    get(target, property, receiver) { 
 
    console.log('get', property) 
 
    if (property == 'prototype') 
 
     console.info('extending %o, prototype=%s', target, target.prototype) 
 
    return target[property] 
 
    } 
 
}) 
 

 
class B extends PA {}

+0

優秀! :-) – Gubbi

+0

@Gubbiは、プロトタイプは他の状況でもアクセスできるので注意してください。多分あなたのユースケースに応じてさらにチェックする必要があります。 – Supersharp

関連する問題