gpt4 book ai didi

html5-canvas - Chrome 和 Closure 的非法调用错误

转载 作者:行者123 更新时间:2023-12-04 04:52:50 26 4
gpt4 key购买 nike

我有一些 Clojurescript 代码来设置 HTML5 Canvas 划线。由于这是跨浏览器问题的典型案例,我想首先检查一下 Canvas Context 对象是否具有属性 setLineDash ,然后调用它(以避免属性错误等)。我选择了aget语法,因为它可以防止名称修改。

(when (aget c "setLineDash")
((aget c "setLineDash") c dash))

相关行由 Google Closure 以“空白”模式编译:
 if(cljs.core.truth_(c["setLineDash"])) {
c["setLineDash"].call(null, c, dash)
}

然后在高级优化模式下:
y(a.setLineDash) && a.setLineDash.call(m, a, c);
所以我觉得编译没问题。 a似乎是 c 的假名, y大概是 cljs.core.truth_ .该代码适用于 Mozilla Firefox(广告和空白)和 Google Chrome(空白)。由于 TypeError,高级编译在 Google Chrome 中不起作用:

Google Chrome Debug Window output

这有点奇怪,因为 .setLineDash是对象的一部分(并在空白模式下工作)。我的“感觉”:现在让我觉得奇怪的是参数 m的调用。是 null我想知道这是否是这种行为的原因?在某种程度上,我对这里的 Javascript 内部结构不太有信心来判断这一点。根据 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call m代替了 this fun.call 的论据.

最佳答案

我现在遵循使用 an extern.js file 的方法并声明 setLineDash在那里。

var CanvasRenderingContext2D = {};
CanvasRenderingContext2D.setLineDash = function() {};

然后我用
(when (..  c -setLineDash)
(.. c (setLineDash dash)))

编译(高级模式)到
y(a.setLineDash)&&a.setLineDash(c);

这有效(没有 .call 怪异)。

关于html5-canvas - Chrome 和 Closure 的非法调用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17185198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com