Пример, который вы привели, не имеет ничего общего с 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.