【问题标题】:Transcrypt: Inherit from a JS prototype?Transcrypt:继承自 JS 原型?
【发布时间】:2017-05-27 06:40:02
【问题描述】:

有没有办法从 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()))

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

有没有人想出一种方法来追溯将 JS 原型转换为 Transcrypt 类或从 JS 原型继承 Transcrypt 类?

【问题讨论】:

    标签: transcrypt


    【解决方案1】:

    正如您所注意到的,由于对多重继承和绑定函数分配的支持,Transcrypt 类在内部与 JavaScript 类不同。

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

    因此,要使 Transcrypt 类 Y_tr(和其他类)继承自 JavaScript 类 X_js,请定义一个 Transcrypt 类 X_tr,并将 X_js 类的对象 x_js 作为其唯一属性(由 @ 创建987654326@)。然后,您可以让 Y_tr 继承自 X_tr 而不是 X_js

    假设X_js 有方法m_am_b,然后给X_tr 也提供该名称的方法。方法X_tr.m_a 只是调用x_js.m_aX_tr.m_b 只是调用x_js.m_b,返回各自的结果。

    x_js 的属性可以通过X_tr 的同名属性访问。

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

    【讨论】:

    • 好的,所以手动外观是唯一的方法。知道了。谢谢。
    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    相关资源
    最近更新 更多