【发布时间】:2015-11-12 15:53:22
【问题描述】:
代码如下:
function fil(val) {
console.log('fil'); // never written to console when run in greasemonkey
return true;
}
var temp = unsafeWindow.someobject;
console.log(temp); // looks fine
temp.filter(fil); // never happens in greasemonkey
如果我在 firebug 控制台中的同一个对象上运行相同的代码(当然没有 unsafeWindow),它的输出就很好。可能是什么原因?
编辑澄清:当在greasemonkey 中运行时,字符串'fil' 永远不会被写入控制台,这表明永远不会调用fil()。另外,如果我执行console.log(temp.filter(fil)); 之类的操作,当代码从greasemonkey 运行时,我永远无法在控制台中看到结果。 (虽然我知道它应该是因为上面的行告诉我temp 存在并且代码运行到那个点。
【问题讨论】:
-
“输出还不错”是什么意思?你看到过滤后的数组了吗?为了方便起见,firebug 控制台会向您显示函数调用的结果,但这不是标准行为,虽然如果您不明确要求输出,您的代码可能在greasemonkey 中运行良好,您将不会有任何输出。
-
console.log('fil') 要求输出? “输出很好”意味着我可以在控制台中看到字符串“fil”(多次)
-
哦,没关系,我忽略了您的过滤器功能,并认为您希望输出过滤后的数组。那时我真的不知道,对不起。
-
无论如何你应该使用 Array.prototype.apply 而不是 filter 在这种情况下。也许这会解决你的问题? - 当然,如果您真的打算过滤数组并且只是使用这个模拟函数进行测试,那么该解决方案是无用的......