当前位置 : 主页 > 大数据 > 区块链 >

protocols – 在ClojureScript中扩展协议以从本机js对象获取值

来源:互联网 收集:自由互联 发布时间:2021-06-22
我有一个代码库,它大量使用嵌套表单的get和get-in.我希望能够使用本机 javascript对象,没有(很多)代码重写. js cljs.user.o = {foo: 42} // in js consolecljs.user (get o "foo") ; = 42 ; in cljs console 由于我只
我有一个代码库,它大量使用嵌套表单的get和get-in.我希望能够使用本机 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原型,你不想这样做,以下是更好的:

(extend-protocol ILookup
  object
  (-lookup [m k] (aget m k))
  (-lookup [m k not-found] (or (aget m k) not-found)))
网友评论