gpt4 book ai didi

javascript - 传入函数数组作为参数,对于函数中的每个函数运行该函数

转载 作者:行者123 更新时间:2023-12-03 07:49:10 25 4
gpt4 key购买 nike

我试图将函数数组作为参数传递给函数 x,然后在函数 x 中执行它们。我也会以某种方式传递参数,但某些参数仅在函数 x 中初始化。

一些功能包括:

_showData(data,type);
console.log(data);
$('#loading').remove();

这是一个示例:

// Called somewhere else 
runFunctions([$('.dashboard').remove, $('.screen-loading').remove]);

var runFunctions = function(functions){
// do some things
for (var i = 0; i < functions.length; i++){
functions[i]();
}

有什么想法吗?

编辑:抱歉,我刚刚意识到程序不知道对象是什么,因为我正在使用 ajax 调用更改范围。

var runFunctions = function(functions){
$.ajax({
method: "POST",
url: "php/database.php",
dataType: "JSON",
data: {type:type},
success: function(data, type){
for (var i = 0; i < functions.length; i++){
functions[i]();
}
}
})
}

<罢工>

这个怎么样:

  _accessDatabase( 
function(onSuccess){
$('.dashboard').remove();
var type = 'home';
_showData(data,type); // it doesn't know what data is, how can I pass it through?
$('.screen-loading').remove();
}
);


var _accessDatabase = function(onSuccess){
$.ajax({
method: "POST",
url: "php/database.php",
dataType: "JSON",
data: {},
success: function(data){
onSuccess(data);
}
})
}

我想将 var 数据传递给 onSuccess 函数,我该怎么做?

解决方法:

var _request_successful = function onSuccess (data){
console.log("running onSuccess");
$('.dashboard').remove();
var type = 'home';
_showData(data,type);
$('.screen-loading').remove();
}

_accessDatabase(_request_successful);


var _accessDatabase = function(onSuccess){
$.ajax({
method: "POST",
url: "php/database.php",
dataType: "JSON",
data: {},
success: function(data){
onSuccess(data);
}
})
}

最佳答案

这段代码的问题是您在 forLoop 中调用的函数没有绑定(bind)到任何东西。就用这个吧。

// Called somewhere else 
runFunctions([
$('.dashboard').remove.bind($('.dashboard'))
, $('.screen-loading').remove.bind($('.screen-loading'))
]);

function runFunctions(functions){
// do some things
for (var i = 0; i < functions.length; i++){
console.log("running")
functions[i]();
}
}

你可以这样做:

function call(method, objs) {
objs.forEach(function (obj) {
obj[method]()
})
}
call('remove', [$('.dashboard'), $('.screen-loading')])

这是一个工作 fiddle :https://jsfiddle.net/ogfgocp4/

为了解释一下它是如何工作的,我不太清楚 JavaScript 的内部结构,但是当你这样做时:$('.dashboard').remove,它会返回 删除功能。如果您立即调用它,它将绑定(bind)到为您提供该方法的对象。如果你将它影响到其他东西,那么它将绑定(bind)到调用它的对象。

我想这里有一小段代码可以很好地解释它。

var obj = {
fun: function () {
console.log(this)
}
}
var fun2 = {
a: 1
}

//this -> obj
obj.fun()

// this -> window
fun = obj.fun
fun()

// this -> fun2
fun2.fun = obj.fun
fun2.fun()

当你调用obj.fun时,this将是对象obj。当您影响 var 的方法时,this 就会变成 window,因为它是此范围内的默认对象。然后,如果我们最终将该函数绑定(bind)到对象 fun2 并立即调用它,则 this 现在就是对象 fun2

关于javascript - 传入函数数组作为参数,对于函数中的每个函数运行该函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35076965/

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