Created
September 13, 2013 15:21
-
-
Save aamedina/6552102 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (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