我正在开发动态验证系统。由于某种原因,传递给 validateNumber 的 args 数组 mainfunc 上的 shift() 无法正常运行。以下是警告框旁边的注释中包含输出的代码:
function mainfunc (func){
//this calls the function validateNumber and passes args to it.
this[func].apply(this, Array.prototype.slice.call(arguments, 1));
}
function validateNumber(args) {
alert(args); //this functions normally. for example, displays fish,3,5
var text = args.shift; //would expect this to return 'fish', right?
alert(text); //instead of 'fish' alerts 'function shift() { [native code] }'. This is the problem.
var minimum = args.shift;
var maximum = args.shift;
return text;
}
validationArgs = classList[i].split('-');
functionName = validationArgs.shift();
validationArgs.unshift($(this).val());
mainfunc(functionName, validationArgs); //calls mainfunc which calls the function
我很困惑为什么会这样。注意:我从这个 StackOverflow 答案中抄袭了 mainfunc:Calling dynamic function with dynamic parameters in Javascript
编辑:哦,天哪。我是一个白痴。我什至在问题标题中正确使用了 shift() !谢谢大家。
最佳答案
这个:
var text = args.shift;
不是方法调用,你想要的是:
var text = args.shift();
您原来所做的就是将 shift
方法从 args
分配给 text
,因此您的:
function shift() { [native code] }
在警报中输出
。执行 args.shift
不会对 args
产生任何影响,因此这两个:
var minimum = args.shift;
var maximum = args.shift;
只需再给您两个对 args.shift
的引用,而无需更改 args
。
关于javascript - 为什么 shift() 在使用 apply() 动态调用的函数中对我的参数工作不正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7006115/