Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ClojureScript: How to add method via prototype to JS Object?

I'm trying to add some functionality to an existing JavaScript system. To be then used from JavaScript again (as opposed to within the ClojureScript namespace). Perhaps this isn't possible?

Here's a simplification of what I want to do:

// JavaScript
String.prototype.foo = function() {
  return "bar";
}

# CoffeeScript
String::foo = ->
  "bar"

I want to be able to run my script above, and then call it from elsewhere in the code.

I've tried messing with extend-type and defprotocol, along with export, but nothing seemed to expose my foo function.

It's possible that this was a design decision and ClojureScript isn't going to work for me here, but I just wanted to make sure I wasn't overlooking something.

like image 972
Eve Freeman Avatar asked Sep 14 '12 07:09

Eve Freeman


1 Answers

It can be done like so:

(set! (.-foo (.-prototype js/String)) (fn [] "bar"))

Or you can use .. sugar:

(set! (.. js/String -prototype -foo) (fn [] "bar"))
like image 97
dnolen Avatar answered Nov 18 '22 21:11

dnolen