Jak*_*old 5 javascript clojure google-closure clojurescript
使用时创建JavaScript对象时reify,如何标记方法,^:export以便Google Closure编译器不会在高级模式下重命名它们?
例如:
(reify
Object
(foo [this] ...)
(bar [this] ...))
Run Code Online (Sandbox Code Playgroud)
我试过了
(reify
Object
(^:export foo [this] ...)
(^:export bar [this] ...))
Run Code Online (Sandbox Code Playgroud)
但这似乎没有帮助,并且名称仍然会随着高级优化而改变.
如果没有办法做到这一点,我怎么能用方法构建一个JavaScript对象,除了创建一个普通的js-obj并使用set!设置属性的函数(我不知道如何防止高级优化破坏事物) ?
您必须提供^:export协议方法,因为您将在JS中调用它们,而不是直接从您的实现对象中调用方法.
(ns example.core)
(defprotocol MyProtocol
(^:export foo [this])
(defn ^:export create []
(reify
MyProtocol
(foo [this] "bar")))
Run Code Online (Sandbox Code Playgroud)
然后你可以在JS中使用它:
var a = example.core.create();
var b = example.core.foo(a);
// b = "bar"
Run Code Online (Sandbox Code Playgroud)
我用当前的cljs.jar尝试了它,它发出了原始foo名称的优化JS .
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |