Eve Freeman
Eve Freeman

Reputation: 33185

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.

Upvotes: 5

Views: 1561

Answers (1)

dnolen
dnolen

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

Related Questions