3

JS プロトタイプから Transcrypt クラスを継承する方法はありますか? 保持する必要がある機能のかなり重いセットを持つ JS オブジェクト型を持っていますが、Transcrypt クラスの多くの優れたアフォーダンスでそれを拡張したいと考えています (特に、私は補足したいと思いますTranscript 演算子のオーバーロードを使用した不格好な JS 数学関数)。

私は明白なことを試しました:

class MyClass (MyJSClass):
    ....

しかし、JS クラスには Transcrypt の「魔法のメソッド」がないため、これは機能しません。

また、JS プロトタイプにメソッドを追加しようとしました。

def add_repr(orig):
    def v_repr(self):
        return "(inherited JS Object)"
    orig.prototype.__repr__ = v_repr

add_repr(MyJSClass)

print (__new__(MyJSClass()))

ただし、その場合、reprTranscrypt は他の魔法のメソッドまたは識別子を探していて、それらが見つからないため、 the が呼び出されることはありません。repr

遡及的に JS プロトタイプを Transcrypt クラスに変換する方法、または JS プロトタイプから Transcrypt クラスを継承する方法を考え出した人はいますか?

4

1 に答える 1

1

お気づきのように、複数の継承とバインドされた関数の割り当てがサポートされているため、Transcrypt クラスは内部的に JavaScript クラスとは異なります。

クリーンな解決策は、対応する JavaScript クラスをカプセル化する Transcrypt ファサード クラスを作成することです。

そのため、 Transcrypt クラスY_tr(および他のクラス) を JavaScript クラスから継承させるには、 classのオブジェクトを唯一の属性としてX_jsTranscrypt クラスを定義します (によって作成されます)。次に、 fromの代わりに fromを継承できます。X_trx_jsX_jsX_tr.__init__Y_trX_trX_js

メソッドとX_jsがあり、その名前でメソッドも指定するとします。メソッドは を呼び出して を呼び出し、それぞれの結果を返します。m_am_bX_trX_tr.m_ax_js.m_aX_tr.m_bx_js.m_b

の属性には、同じ名前を持つ のx_jsプロパティを介してアクセスできます。X_tr

X_trとは で行われるため、Y_trを使用せずにインスタンス化できることに注意してください。__new__self.x_js = __new__ (X_js ())X_tr.__init__

于 2017-06-02T16:29:32.463 に答える