javascript - 导出 deftype 方法

标签 javascript clojure google-closure-compiler clojurescript

我正在尝试在 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/

相关文章:

algorithm - RRB 树保持什么不变性?

recursion - 如何为递归函数的每次迭代收集多个项目

javascript - 不重命名的 ADVANCED_OPTIMIZATION

javascript - 如何使用 Google Closure API 删除调试代码?

configuration - 在高级模式下编译时对象被删除或部分折叠 - Google Closure Compiler

javascript - 在另一个angularjs中使用 Controller 的功能

javascript - 导入 Vue 组件

javascript - HTML 将 WebGL Canvas 保存为图像

java - 在 Clojure 中强制垃圾收集是个好主意吗?

javascript - 使用 pace.js 加载附加图像