我正在尝试在 javascript 中创建对象并调用一个方法。方法名称被修改。我尝试使用 externs.js 但运气不佳。
(deftype ^:export SceneMain []
Object
(handleShow [_]
(display-categories)))
;; should be used in javascript as:
var s = new SceneMain();
s.handleShow();
;; Uncaught TypeError: Object [object Object] has no method 'handleShow'
;; Uncaught TypeError: Object #<dg> has no method 'handleShow'
这是我的 externs.js
var SceneMain = {};
SceneMain.handleShow = function() {};
最佳答案
不完全确定您要在那里完成什么。
externs.js
在您使用未使用 Google 的 Closure 编译器编译的 Clojurescript 中的外部 javascript 库时很有用,主要原因是当使用超出空格的优化时,编译器不会损坏外部库。
以MixPanel Javascript为例应用程序接口(interface)。
假设您有以下使用该 api 的 cljs 代码:
(defn track
([name data]
(.track js/mixpanel name
(clj->js data)))
([name]
(.track js/mixpanel name)))
你需要在你的 externs.js
中定义
var mixpanel = {};
mixpanel.track = function() {};
避免 Closure 编译器混淆对该对象/函数的调用。
现在,如果您想从 Javascript 调用 Clojurescript 函数,使用 ^:export
即可。
假设你有:
(ns test.cljs)
(defn ^:export testfn
[]
(.log js/console "test"))
从 javascript 你做的:
test.cljs.testfn()
关于javascript - 导出 deftype 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20189860/