Jos*_*ohl 12 javascript clojurescript
我正在使用一个JavaScript库,它将构造函数公开为全局对象的属性.
在JavaScript中,我可以像这样调用构造函数.
var thing = new Library.Thing();
Run Code Online (Sandbox Code Playgroud)
如何在ClojureScript中调用构造函数?这些都不起作用.
; These all cause compiler errors
(new (.-Thing js/Library)) ; First arg to new must be a symbol
(new (.Thing js/Library))
(new .-Thing js/Library)
(new .Thing js/Library)
(new js/Library/Thing) ; Invalid token: js/Library/Thing
; These all compile to different JS than I am looking for
((.-Thing js/Library).) ; Library.Thing.call(null, _SLASH_);
((.Thing js/Library).) ; Library.Thing().call(null, _SLASH_);
Run Code Online (Sandbox Code Playgroud)
如果我使用js*它可以正常工作,但这是作弊,对吧?
(js* "new Library.Thing()")
Run Code Online (Sandbox Code Playgroud)
调用作为另一个对象属性的构造函数的正确方法是什么?
tan*_*mer 11
如果你查看http://himera.herokuapp.com/synonym.html,你可以找到在clojurescript中实例化objets的特定语法.
我在本文档中编写了这个js mock库来进行测试:
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
return "Hello, " + this.name;
};
var f={
"hola":"hola juan",
Person:Person
};
var person=new f.Person("Juan");
alert(person.greet());
Run Code Online (Sandbox Code Playgroud)
然后从clojurescript你必须使用点语法(但前缀为"js /"你的js全局类型):
(let [Person (.-Person js/f)
juan (Person. "Juan")
]
(.log js/console (.greet juan)))
Run Code Online (Sandbox Code Playgroud)
我在这个答案中没有提到:你的cljsbuild编译的externs属性,因为我知道你直接在你的html头文件中包含你的js脚本库.所以,如果这条线适合你,(js* "new Library.Thing()")那就意味着js库可以从cljs-js编译中获得.
无论如何,我在js模拟库中留下了一个"alert"来检查文件是否正确加载
我希望它适合你
胡安
| 归档时间: |
|
| 查看次数: |
2713 次 |
| 最近记录: |