javascript - 使用 Transcrypt 覆盖方法

标签 javascript python transcrypt

在 Python 中,覆盖方法是有效的,例如:

class A():
    def original(self):
        print("original")

def alternative(self):
    print("alternative")

A.original = alternative
a = A()
a.original()

这将打印alternative。但在转换为 Javascript 后,您将收到错误:Uncaught TypeError: Cannot set property original of function...

当然,这与它被转译为:

var A = __class__ ('A', [object], {
    __module__: __name__,
    get original () {return __get__ (this, function (self) {
        print ('original');
    });}
});

其中 original 是不能以这种方式覆盖的属性。

有解决办法吗?在某些情况下,拥有这种行为可能很有用。 最好的问候

最佳答案

以下解决方法可以解决问题:

class A():
    def original (self, anArg):
        print ('Original:', anArg)

def alternative (self, anArg):
    print ('Alternative:', anArg)

a0 = A ()
a0.original ('Time flies like an arrow.')

__pragma__ ('js', '{}', '''Object.defineProperty (A, "original", {
    get: function (self) {return __get__ (this, alternative)}
})''')

a1 = A()
a1.original ('Fruit flies like a banana.')

它将打印:

原文:光阴似箭。 备选方案:像香蕉一样的果蝇。

我添加了一个参数来说明他的解决方案的普遍性。

关于javascript - 使用 Transcrypt 覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47847067/

相关文章:

javascript - Javascript 中的链式返回

javascript - 我想从 MongoDB 文档返回特定字段值,但我不断将 [object Promise] 作为返回值

python - Linux静态路由规则文件格式转换使用Python

python - 为什么 Python 3.7 数据类不支持 < > <= 和 >=,或者它们支持?

javascript - jQuery 淡入 OnLoad?

python - 具有不规则二维 numpy 数组的 Matplotlib basemap + contourf

python - 如何垂直合并/附加/堆叠/粘贴文件夹中的所有图像到新图像

python - 不用java转加密?

Transcrypt:继承自 JS 原型(prototype)?

javascript - 如何使用 ID 循环 JavaScript 函数?