在clojurescript 1.9.89和Chrome 50.0.2661.102中,我可以创建一个日志语句,如:
(js/console.log "works")
但我不能创建一个像:
(def brokenlog js/console.log)
(brokenlog "but not here")
--> #object[TypeError TypeError: Illegal invocation]
当我尝试通过打印我自己的brokenlog函数的值来比较这些方法时,它看起来就像“真实的” – 也就是说,brokenlog和js / console.log都为我评估:
#object[log "function log() { [native code] }"]
同样,我看到这种行为:
cljs.user=> (js/document.querySelector "body")
#object[HTMLBodyElement [object HTMLBodyElement]]
cljs.user=> (def l js/document.querySelector)
#'cljs.user/l
cljs.user=> (l "body")
#object[TypeError TypeError: Illegal invocation]
nil
升级到Chrome 52会修复console.log行为,但不会修复document.querySelector行为.
所以我有两个问题:
1.我错过了什么
2.我应该阅读哪些官方文档可以解释它?
谢谢!
最佳答案 您使用的是哪个浏览器和clojurescript版本?
如果下面的代码显示为nil,则以下代码应该适用于您的浏览器.
.as-console-wrapper .as-console {
display: none;
}
<pre><code class="language-klipse">
(js/console.log "Work!")
(def brokenlog js/console.log)
(brokenlog "Work again!")
; two line should be seen in your browser log
</code></pre>
<script>
window.klipse_settings = {
selector: '.language-klipse', // css selector for the html elements you want to klipsify
};
</script>
<script src="http://app.klipse.tech/plugin/js/klipse_plugin.js?"></script>
<link href="http://app.klipse.tech/css/codemirror.css" rel="stylesheet"/>
编辑
这是clojurescript
(ns hello-world.core)
(def mylog js/console.log)
(mylog "Hello")
编译成javascript
hello_world.core.mylog = console.log;
hello_world.core.mylog.call(null,"Hello");
console.log.call(null,….)触发chrome bug,console.log期望这是控制台对象.它应该按照问题日志https://bugs.chromium.org/p/chromium/issues/detail?id=167911中的说明进行修复.