Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何调用存储在jQuery数组中的函数?_Javascript_Jquery_Hook - Fatal编程技术网

Javascript 如何调用存储在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.

我在jQuery中有一个钩子数组,在将数据加载到网格之前执行这些钩子。然而,在一个例子中,我想移除钩子,然后再将其添加回去供以后使用。无论我在做什么,都不能正常工作。。。这可能是语法错误,因为我对jQuery还是有点陌生。任何帮助都将不胜感激,谢谢

当前代码:

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语法。是的,不幸的是,问题出在代码的其他地方。我一直在这样做,但它不起作用,这让我相信我必须在函数()中包装预加载,但我认为编写代码的方式是将钩子添加到错误的对象。我错了!