Reputation: 33185
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.
Upvotes: 5
Views: 1561
Reputation: 18556
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"))
Upvotes: 12