Skip to content

Instantly share code, notes, and snippets.

@aamedina
Created September 13, 2013 15:21
Show Gist options
  • Select an option

  • Save aamedina/6552102 to your computer and use it in GitHub Desktop.

Select an option

Save aamedina/6552102 to your computer and use it in GitHub Desktop.
(extend-type object
IWithMeta
(-with-meta [obj meta]
(set! (.-meta obj) meta) obj)
IMeta
(-meta [obj] (.-meta obj))
IEquiv
(-equiv [obj other]
(boolean
(when (goog/isObject other)
(when (== (count obj) (count other))
(every? identity
(map (fn [xkv] (= (get other (first xkv) never-equiv)
(second xkv)))
obj))))))
ILookup
(-lookup [obj k]
(-lookup obj k nil))
(-lookup [obj k not-found]
(let [v (aget obj k)]
(if (nil? v) not-found v)))
IAssociative
(-assoc [obj k v]
(doto obj
(goog.object/add k v)))
(-contains-key? [obj k]
(goog.object/containsKey obj k))
ICounted
(-count [obj] (count (js-keys obj)))
ISeq
(-first [obj] (first (seq obj)))
(-rest [obj] (rest (seq obj)))
ISeqable
(-seq [obj]
(for [k (js-keys obj)]
[k (aget obj k)])))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment