Javascript 如何调用存储在jQuery数组中的函数?
我在jQuery中有一个钩子数组,在将数据加载到网格之前执行这些钩子。然而,在一个例子中,我想移除钩子,然后再将其添加回去供以后使用。无论我在做什么,都不能正常工作。。。这可能是语法错误,因为我对jQuery还是有点陌生。任何帮助都将不胜感激,谢谢 当前代码:Javascript 如何调用存储在jQuery数组中的函数?,javascript,jquery,hook,Javascript,Jquery,Hook,我在jQuery中有一个钩子数组,在将数据加载到网格之前执行这些钩子。然而,在一个例子中,我想移除钩子,然后再将其添加回去供以后使用。无论我在做什么,都不能正常工作。。。这可能是语法错误,因为我对jQuery还是有点陌生。任何帮助都将不胜感激,谢谢 当前代码: var preLoad = this.opts.hooks.preLoad.pop(); //stuff happens //now I want to add the preLoad hook back this.opts.hooks.
var preLoad = this.opts.hooks.preLoad.pop();
//stuff happens
//now I want to add the preLoad hook back
this.opts.hooks.preLoad.push(function(report) { preLoad(report); });
编辑
事实证明,问题出在代码的其他地方。但是,我仍然想知道如何最好地实现这一点。您访问它的方式与存储在任何其他数组中的任何其他变量相同
this.opts.hooks.preLoad[0](myReport)
你不能像这样添加你删除的函数吗
var preLoad = this.opts.hooks.preLoad.pop();
//stuff happens
//now I want to add the preLoad hook back
this.opts.hooks.preLoad.push(preLoad);
您确定它始终是数组中要删除的最后一个吗?这可能与您将函数推回到堆栈上时正在“扫描”参数“report”有关 试着这样做:
var preLoad = this.opts.hooks.preLoad.pop();
//stuff happens
//now I want to add the preLoad hook back
this.opts.hooks.preLoad.push(preLoad);
我在这里测试了它您给出的示例与jQuery无关,它是纯Javascript。此外,请注意,您在示例中所做的是。。。不对。考虑这一点:
var ReportManager {
...
replace: function(report) {
var preLoad = this.opts.hooks.preLoad.pop();
//stuff happens
//now I want to add the preLoad hook back
this.opts.hooks.preLoad.push(function(report) { preLoad(report); });
}
}
如果执行此操作:
replace(null);
replace({foo:'bar'});
replace(null);
您的this.opts.hooks.preLoad
数组将如下所示:
Array(
0: function(report) { return function(report) { return function(report) { ... } } }
)
因为每次执行代码时,都会将包装好的函数推入自身。我不知道你为什么需要pop
和push
再把它放回去,但这看起来很奇怪
另外,Javascript是一种非常灵活的语言;这意味着你可以做很多奇怪的事情,比如
"hello".concat(" world"); // -> 'hello world'
0.toString(); // -> '0'
(function(a) { return a; })("foo"); // -> 'foo'
(function() { return false; })() || (function() { return true; })(); // -> true (executes both functions)
(function(i) { return [i*2,i*3,i*4]; })(2)[1]; // -> 6
$('selector')[0]; // ...
// etc.
这与jQuery有什么关系吗?我想这更像是javascript语法。是的,不幸的是,问题出在代码的其他地方。我一直在这样做,但它不起作用,这让我相信我必须在函数()中包装预加载,但我认为编写代码的方式是将钩子添加到错误的对象。我错了!