ClojureScript:如何通过原型向JS对象添加方法?

5
我想给现有的JavaScript系统添加一些功能,以便再次从JavaScript中使用(而不是在ClojureScript命名空间内部使用)。也许这是不可能的吗?
以下是我想做的简化版:
// JavaScript
String.prototype.foo = function() {
  return "bar";
}

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

我希望能够运行上述脚本,并从代码的其他位置调用它。

我尝试过使用extend-typedefprotocolexport,但似乎没有暴露我的foo函数。

可能这是一个设计决策,ClojureScript在这里不适用于我,但我想确保我没有忽略什么。

1个回答

12

可以这样做:

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

或者你可以使用..语法糖:

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

测试过并且可用。如果这些信息能够在文档中找到就好了。 :) - Eve Freeman
是的,有人需要为常见的JavaScript互操作表单编写ClojureScript页面。 - dnolen
你能解释一下这段代码的含义吗?.. 很令人困惑。那是不是只是将你移出了命名空间? - Eve Freeman
不,这只是用于深度属性访问的语法糖。 - dnolen
我发现了http://appletree.or.kr/quick_reference_cards/Others/ClojureScript%20Cheat%20Sheet.pdf,其中包含一些有用的互操作和一般cljs表单。 - Jon Rose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接