gpt4 book ai didi

javascript - 如何使用 ^ :export, 标记使用 `reify` 创建的方法,以便 Closure 编译器不重命名它们?

转载 作者:数据小太阳 更新时间:2023-10-29 06:11:10 25 4
gpt4 key购买 nike

当使用 reify 创建 JavaScript 对象时,如何使用 ^:export 标记方法,以便 Google Closure 编译器不会在高级模式下重命名它们?

例如:

(reify
Object
(foo [this] ...)
(bar [this] ...))

我试过了

(reify
Object
(^:export foo [this] ...)
(^:export bar [this] ...))

但这似乎没有帮助,并且名称仍然会随着高级优化而改变。

如果没有办法做到这一点,除了创建一个普通的 js-obj 并使用 set! 之外,我该如何使用方法构造一个 JavaScript 对象将函数设置为属性(我不确定如何防止高级优化破坏事物)?

最佳答案

您必须在您的协议(protocol)方法上提供 ^:export,因为您将在 JS 中调用它们,而不是直接从具体化对象中调用它们。

(ns example.core)

(defprotocol MyProtocol
(^:export foo [this])

(defn ^:export create []
(reify
MyProtocol
(foo [this] "bar")))

然后你可以在 JS 中使用它:

var a = example.core.create();
var b = example.core.foo(a);
// b = "bar"

我用当前的 cljs.jar 试过了并发出带有原始 foo 名称的优化 JS。

关于javascript - 如何使用 ^ :export, 标记使用 `reify` 创建的方法,以便 Closure 编译器不重命名它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29995440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com