Javascript 在调用回调函数之前修改回调函数的参数

Javascript 在调用回调函数之前修改回调函数的参数,javascript,parameters,callback,dom-events,Javascript,Parameters,Callback,Dom Events,我有一个自定义对象,它实现了稍后将执行的函数。有人会这样称呼它: customObject.onSomething(function(e) { // do something with e console.log('foobar'); }); 以下是onSomething是如何创建的: var CustomObject = function() { this.onSomething = function(callback) { // If the use

我有一个自定义对象,它实现了稍后将执行的函数。有人会这样称呼它:

customObject.onSomething(function(e) {
    // do something with e
    console.log('foobar');
});
以下是onSomething是如何创建的:

var CustomObject = function() {
    this.onSomething = function(callback) {
        // If the user passes in parameter(s), how can I modify them before calling?
        callback.apply(this);
    }
}
在对函数执行apply或call之前,如何修改用户传入的参数?

apply接受第二个参数,该参数是要传递给函数的参数列表。调用也会执行相同的操作,只是它会在第一个参数(用作此参数)之后传递自己的参数列表

因此,如果您知道需要哪些参数,只需将它们作为要应用的第二个参数或要调用的参数列表添加到调用函数:

如果您不知道应该使用哪种类型的参数,但仍然希望对它们进行处理,那么可以使用内置参数伪数组进行处理,该伪数组保存给定给当前函数的参数,即使您没有显式声明它们

您可以使用它来调用回调函数,调用函数的参数与调用函数的参数相同,或者进行一些转换;e、 g:

this.onSomething = function() {
    // call callback with the same arguments we got
    callback.apply(this, arguments);

    // or, make some changes
    var newArgs = ["extra argument", arguments[1], arguments[0]];
    callback.apply(this, newArgs);
};
apply接受第二个参数,该参数是要传递给函数的参数列表。调用也会执行相同的操作,只是它会在第一个参数(用作此参数)之后传递自己的参数列表

因此,如果您知道需要哪些参数,只需将它们作为要应用的第二个参数或要调用的参数列表添加到调用函数:

如果您不知道应该使用哪种类型的参数,但仍然希望对它们进行处理,那么可以使用内置参数伪数组进行处理,该伪数组保存给定给当前函数的参数,即使您没有显式声明它们

您可以使用它来调用回调函数,调用函数的参数与调用函数的参数相同,或者进行一些转换;e、 g:

this.onSomething = function() {
    // call callback with the same arguments we got
    callback.apply(this, arguments);

    // or, make some changes
    var newArgs = ["extra argument", arguments[1], arguments[0]];
    callback.apply(this, newArgs);
};

听起来您的要求相当简单,请参见以下内容:

var CustomObject = function() {
    this.onSomething = function(callback, param1, param2) {
        param1 += 4;
        param2 = 'Something about ' + param2 + ' is different...';
        callback.apply(this, [param1, param2]);
    }
}

听起来您的要求相当简单,请参见以下内容:

var CustomObject = function() {
    this.onSomething = function(callback, param1, param2) {
        param1 += 4;
        param2 = 'Something about ' + param2 + ' is different...';
        callback.apply(this, [param1, param2]);
    }
}

您希望如何修改它?我希望将e设置为当用户调用函数时对用户有意义的值。您希望如何修改它?我希望将e设置为当用户调用函数时对用户有意义的值。这是我一直在寻找的。谢谢让我问你:如果用户发送n个未知参数会怎么样。如何将这些参数动态地传递回apply?参数将包含n个项,这些项是给定给调用函数的参数。如果需要不加更改地传递这些参数,请调用applythis,arguments。如果您想更改它们,可以从您得到的数组中创建一个新数组,您可以检查参数、检查其长度、复制其元素等,并将其传递给应用程序。我编辑了我的答案以反映这一点。这就是我所寻找的。谢谢让我问你:如果用户发送n个未知参数会怎么样。如何将这些参数动态地传递回apply?参数将包含n个项,这些项是给定给调用函数的参数。如果需要不加更改地传递这些参数,请调用applythis,arguments。如果您想更改它们,可以从您得到的数组中创建一个新数组,您可以检查参数、检查其长度、复制其元素等,并将其传递给应用程序。我编辑了我的答案以反映这一点。