我试图将一个函数数组作为参数传递给函数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);
}
})
}
答案 0 :(得分:1)
此代码的问题在于您在forLoop中调用的函数未绑定到任何内容。取而代之的是。
// 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')])
这是一个工作小提琴:https://jsfiddle.net/ogfgocp4/
为了解释一下它是如何工作的,我不确切地知道JavaScript的内部,但当你这样做:$('.dashboard').remove
时,它会返回remove
函数。如果你立即调用它,它将被绑定到给你方法的对象。如果你将它影响到别的东西,那么它将被绑定到它被调用的对象。
这里有一小段代码,我想这很好解释。
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
,因为它是此范围内的默认对象。然后,如果我们最终将函数绑定到对象fun2
并立即调用它,this
现在是对象fun2
。