【发布时间】:2022-01-15 06:34:31
【问题描述】:
我最近一直在试验 Typescript 装饰器,以尝试解决我在应用程序中遇到的“问题”。我正在使用 JS 桥将 TS 代码提供给 Android 和 iOS,目前我们声明这样的函数:
index.js
import foo from './bar'
global.App = function() {
this.foo = foo;
};
以上内容将使foo 函数在桥的本机端可用
我想编写一个装饰器来应用 foo 方法,该方法将在 global.App 上“注册”自身,但我在该任务中失败了。
这是可以工作的装饰器:
export const Task = (target, propertyKey, descriptor) => {
let originalMethod = descriptor.value;
descriptor.value = (...args) => originalMethod.apply(target, args);
if (!global.App) {
global.App = function () {
this.foo = descriptor.value;
};
}
return descriptor;
}
如何向 global.App 函数添加另一种方法?
【问题讨论】:
-
您的代码将
global.App设置为function,但您只需尝试将其值设置为简单值。目前尚不清楚您要达到的目标。 -
每当我们为
global.App函数设置一个属性时,该属性就可以通过桥在本机端访问,因此我们可以调用我们为该属性设置的方法 -
您的网桥中可能有一个自定义行为调用
global.App。正如 Pointy 的评论所指出的,在一种情况下,您将其设置为一个函数,而在另一种情况下,您将其设置为一个已经存在的对象。另请注意,您可能被this误导。 -
在这种情况下,这是指我分配给
global.App的内部函数,对吗?如何向global.App添加另一个属性?
标签: javascript typescript typescript-decorator