Transcrypt:继承JS原型?

时间:2017-05-27 06:40:03

标签: transcrypt

有没有办法从JS原型继承Transcrypt类?我有一个JS对象类型,它具有我需要保留的相当多的功能,但我想在Transcrypt类中提供很多很好的功能(特别是,我想补充一下)笨拙的JS数学函数与Transcript运算符重载)。

我已经尝试过显而易见的事了:

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()))

但是在这种情况下,repr永远不会被调用,因为Transcrypt正在寻找其他魔术方法或标识符而找不到它们因此它不会寻找repr

是否有人制定了一种方法,可以追溯将JS原型转换为Transcrypt类,还是从JS原型继承Transcrypt类?

1 个答案:

答案 0 :(得分:1)

正如您所注意到的,Transcrypt类在内部与JavaScript类不同,因为它支持多重继承和绑定函数赋值。

一个干净的解决方案是创建一个Transcrypt外观类,它封装了相应的JavaScript类。

因此,要使Transcrypt类Y_tr(和其他类)继承自JavaScript类X_js,请使用类{{1}的对象X_tr定义Transcrypt类x_js作为它的唯一属性(由X_js创建)。然后,您可以X_tr.__init__继承Y_tr而不是X_tr

X_js有方法X_jsm_a,然后按名称提供m_b方法。方法X_tr只需调用X_tr.m_ax_js.m_a即可调用X_tr.m_b,并返回相应的结果。

x_js.m_b的属性可以通过具有相同名称的x_js属性进行访问。

请注意,X_trX_tr可以在不使用Y_tr的情况下进行实例化,因为__new__已在self.x_js = __new__ (X_js ())中完成。