在clojurescript中,如何列出对象的所有协议?

在clojurescript中,如何列出对象的所有协议?,clojure,clojurescript,Clojure,Clojurescript,我已经定义了一个列出类型的函数 (defn js-type [o] (let [ty (type o) ty (if (and ty (.-cljs$lang$type ty)) (.-cljs$lang$ctorStr ty) (js/goog.typeOf o))] ty)) 用法 我想在clojurescript中有一个函数,列出所有协议 (js-protocols (keys {:a 1})) ;=> [

我已经定义了一个列出类型的函数

(defn js-type [o]
   (let [ty (type o)
        ty (if (and ty (.-cljs$lang$type ty))
             (.-cljs$lang$ctorStr ty)
            (js/goog.typeOf o))]
  ty))
用法

我想在clojurescript中有一个函数,列出所有协议

(js-protocols (keys {:a 1})) ;=> [Object, IMeta, IWithMeta .... INext ] 

KeySeq的所有协议都在这里:

这是另一个在运行时不存在的反射功能。通过查看
cljs.analyzer/namespaces
的内容,或者直接通过ClojureScript analyzer/compiler,可以通过宏获取此信息

(js-protocols (keys {:a 1})) ;=> [Object, IMeta, IWithMeta .... INext ]