javascript - 为什么 shift() 在使用 apply() 动态调用的函数中对我的参数工作不正常?

标签 javascript function apply shift

我正在开发动态验证系统。由于某种原因,传递给 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/

相关文章:

performance - 比较记录结果和 Double For 循环

python - Pandas 适用,但访问之前计算的值

javascript - 间隔两个 div 并阻止它们相互连接

javascript - Hammer.js 在点击叠加层并将其移除时将焦点设置在叠加层下方的输入上

javascript 错误为 null 或不是对象

c - 如何计算素数

javascript - JS 面向对象编程。继承和apply()函数。为什么它不起作用?

javascript - 按值从数组中删除一个项目,但保留该项目的重复项

javascript - 扩展 JavaScript 函数

javascript - 调用 jquery 函数并传递变量