JavaScript apply()将所有参数作为一个数组传递
我试图通过传递函数名并使用apply()在控件中执行外部JS函数 我正在使用堆栈上找到的解决方案 函数MyFunction:JavaScript apply()将所有参数作为一个数组传递,javascript,Javascript,我试图通过传递函数名并使用apply()在控件中执行外部JS函数 我正在使用堆栈上找到的解决方案 函数MyFunction: function MyFunction(e, data){ // e <- this is an array [e, data] // data <- this is undefined } 函数MyFunction(e,数据){ //e var args = Array.prototype.slice.call(arguments, 2);
function MyFunction(e, data){
// e <- this is an array [e, data]
// data <- this is undefined
}
函数MyFunction(e,数据){
//e
var args = Array.prototype.slice.call(arguments, 2);
试一试
因此有两种方法:
(一)
executeFunctionByName(函数名,窗口,[e,数据]);
到
(二)
var args=Array.prototype.slice.call(参数,2);
到
之后
var args = Array.prototype.slice.call(arguments, 2);
试一试
因此有两种方法:
(一)
executeFunctionByName(函数名,窗口,[e,数据]);
到
(二)
var args=Array.prototype.slice.call(参数,2);
到
之后
var args = Array.prototype.slice.call(arguments, 2);
试一试
因此有两种方法:
(一)
executeFunctionByName(函数名,窗口,[e,数据]);
到
(二)
var args=Array.prototype.slice.call(参数,2);
到
之后
var args = Array.prototype.slice.call(arguments, 2);
试一试
因此有两种方法:
(一)
executeFunctionByName(函数名,窗口,[e,数据]);
到
(二)
var args=Array.prototype.slice.call(参数,2);
到
apply
很好。问题是您有一个双嵌套数组
当您调用var args=Array.prototype.slice.call(arguments,2);
时,它本身返回一个包含另一个数组的数组
您正在传递[[e,data]]
以应用,而不是[e,data]
有两种解决方案,具体取决于您希望解决问题的方式:
如果要继续以这种方式调用方法:
executeFunctionByName(functionName, window, [e, data]);
function executeFunctionByName(functionName, context, args) {
var namespaces = functionName.split(".");
// ....
return context[func].apply(context, args);
}
这样,您就完全不需要参数上的数组.prototype.slice
。您有一个可预测的参数数量,它总是3个。只需这样编写您的函数:
executeFunctionByName(functionName, window, [e, data]);
function executeFunctionByName(functionName, context, args) {
var namespaces = functionName.split(".");
// ....
return context[func].apply(context, args);
}
如果要在函数中继续使用Array.prototype.slice
,则需要更改调用函数的方式。参数不应包装在数组中:
executeFunctionByName(functionName, window, e, data);
apply
很好。问题是您有一个双嵌套数组
当您调用var args=Array.prototype.slice.call(arguments,2);
时,它本身返回一个包含另一个数组的数组
您正在传递[[e,data]]
以应用,而不是[e,data]
有两种解决方案,具体取决于您希望解决问题的方式:
如果要继续以这种方式调用方法:
executeFunctionByName(functionName, window, [e, data]);
function executeFunctionByName(functionName, context, args) {
var namespaces = functionName.split(".");
// ....
return context[func].apply(context, args);
}
这样,您就完全不需要参数上的数组.prototype.slice
。您有一个可预测的参数数量,它总是3个。只需这样编写您的函数:
executeFunctionByName(functionName, window, [e, data]);
function executeFunctionByName(functionName, context, args) {
var namespaces = functionName.split(".");
// ....
return context[func].apply(context, args);
}
如果要在函数中继续使用Array.prototype.slice
,则需要更改调用函数的方式。参数不应包装在数组中:
executeFunctionByName(functionName, window, e, data);
apply
很好。问题是您有一个双嵌套数组
当您调用var args=Array.prototype.slice.call(arguments,2);
时,它本身返回一个包含另一个数组的数组
您正在传递[[e,data]]
以应用,而不是[e,data]
有两种解决方案,具体取决于您希望解决问题的方式:
如果要继续以这种方式调用方法:
executeFunctionByName(functionName, window, [e, data]);
function executeFunctionByName(functionName, context, args) {
var namespaces = functionName.split(".");
// ....
return context[func].apply(context, args);
}
这样,您就完全不需要参数上的数组.prototype.slice
。您有一个可预测的参数数量,它总是3个。只需这样编写您的函数:
executeFunctionByName(functionName, window, [e, data]);
function executeFunctionByName(functionName, context, args) {
var namespaces = functionName.split(".");
// ....
return context[func].apply(context, args);
}
如果要在函数中继续使用Array.prototype.slice
,则需要更改调用函数的方式。参数不应包装在数组中:
executeFunctionByName(functionName, window, e, data);
apply
很好。问题是您有一个双嵌套数组
当您调用var args=Array.prototype.slice.call(arguments,2);
时,它本身返回一个包含另一个数组的数组
您正在传递[[e,data]]
以应用,而不是[e,data]
有两种解决方案,具体取决于您希望解决问题的方式:
如果要继续以这种方式调用方法:
executeFunctionByName(functionName, window, [e, data]);
function executeFunctionByName(functionName, context, args) {
var namespaces = functionName.split(".");
// ....
return context[func].apply(context, args);
}
这样,您就完全不需要参数上的数组.prototype.slice
。您有一个可预测的参数数量,它总是3个。只需这样编写您的函数:
executeFunctionByName(functionName, window, [e, data]);
function executeFunctionByName(functionName, context, args) {
var namespaces = functionName.split(".");
// ....
return context[func].apply(context, args);
}
如果要在函数中继续使用Array.prototype.slice
,则需要更改调用函数的方式。参数不应包装在数组中:
executeFunctionByName(functionName, window, e, data);
在您的示例中,您应该能够使用e或数据调用它,但不能同时使用两者
我会这样做:
function MyFunction(data){
//Some action with your data
}
并称之为:
executeFunctionByName(functionName, window, [data]);
其中数据是一些数据数组。我认为Mozilla页面上的文档对其进行了更清楚的解释,可以在中找到。在您的示例中,您应该能够使用e或数据调用它,但不能同时使用两者
我会这样做:
function MyFunction(data){
//Some action with your data
}
并称之为:
executeFunctionByName(functionName, window, [data]);
其中数据是一些数据数组。我认为Mozilla页面上的文档对其进行了更清楚的解释,可以在中找到。在您的示例中,您应该能够使用e或数据调用它,但不能同时使用两者
我会这样做:
function MyFunction(data){
//Some action with your data
}
并称之为:
executeFunctionByName(functionName, window, [data]);
其中数据是一些数据数组。我认为Mozilla页面上的文档对其进行了更清楚的解释,可以在中找到。在您的示例中,您应该能够使用e或数据调用它,但不能同时使用两者
我会这样做:
function MyFunction(data){
//Some action with your data
}
并称之为:
executeFunctionByName(functionName, window, [data]);
其中数据是一些数据数组。我认为Mozilla页面上的文档对其解释得更清楚,可以在executeFunctionByName(functionName,window,e,data);
的文档中找到