我有一个大量使用 get
的代码库和 get-in
对于嵌套形式。我也希望能够使用 native javascript 对象,而无需(大量)代码重写。
js> cljs.user.o = {foo: 42} // in js console
cljs.user> (get o "foo") ; => 42 ; in cljs console
由于我只查询表单,不修改它们,我认为实现
get
就足够了(get-in
依赖)。这是我的尝试,(extend-protocol ILookup
js/Object
(-lookup [m k] (aget m k))
(-lookup [m k not-found (or (aget m k) not-found)))
它似乎有效,但它以一种奇怪的方式破坏了很多东西。
最佳答案
您正在修改 Object 原型(prototype),您不想这样做,以下更好:
(extend-protocol ILookup
object
(-lookup [m k] (aget m k))
(-lookup [m k not-found] (or (aget m k) not-found)))
关于protocols - 在 ClojureScript 中扩展协议(protocol)以从 native js 对象中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16894465/