Search code examples
javascriptclojurescript

Use apply on native JavaScript functions


In clojureScript the following multi-arity function

(defn sum [& xs] (reduce + xs))

can be either called via (sum 4 6 9) or by the use of (apply sum [4 6 9]) which yields the same result.

How can this be done with a native JavaScript function, such as: console.log.

(apply js/console.log [1 2 3])

This, yields the following error:

#object[TypeError TypeError: 'log' called on an object that does not implement interface Console.]

Solution

  • Some browsers always assuming the this is certain object, you can use .bind in js for temporal fix.

    ; you can use .bind on any function
    (def d (.bind (.-log js/console) js/console))
    (def ms ["aaa" "bbb" "barbarbar"])
    (mapv d ms)
    

    Related questions

    What does this statement do? console.log.bind(console)

    Why do js functions fail when I assign them to a local variable?