2

次のコードがあります。

var submitHandler = function ($link, $form, close) {

   var val = $form.valid();
   var action = $form.attr('data-action')
   var entity = $form.attr('data-entity')
   var href = $form.attr('data-href');
   var rownum = $link.attr('data-row');
   var $row = $('#row_' + rownum);
   var $submitBt = $('.block-footer button:contains("Submit")');
   .....
   .....
   jsonSuccessModal(action, rownum, close, $form, $submitBt, $row);

}

function jsonSuccessModal(action, rownum, close, $form, $submitBt, $row) {
    ...
}

多くのパラメーターを使用するのではなく、最初のコード ブロックで変数を組み合わせ、その組み合わせを表すオブジェクトを jsonSuccessModal に送信する方法はありますか。匿名オブジェクトのようなもの?

4

5 に答える 5

0

一般的に、あなたの質問に対する答えは NO です。JavaScript は、Python ( **kwargs) などのキーワード引数のアンパックをサポートしていません。この種の機能をサポートするために Javascript を「拡張」することもできますが、コードはややぎこちなくなります (この言語にはリフレクションもサポートされていないため)。

function paramNames(func) {
    return func.toString().match(/\(([^)]+)\)/)[1].split(/[\s,]+/)
}

function callWithKwargs(func, args, thisptr) {
    return func.apply(thisptr || this,
        paramNames(func).map(function(e) { return args[e] }));
}

// example:

function foo(bar, baz, spam) {
    console.log('bar', bar, 'baz', baz, spam, 'spam'); 
}

callWithKwargs(foo, {
    spam: 'bacon',
    baz: 'hello',
    bar: 'barbar'
})

とはいえ、問題の関数があなたのものであれば、すでに提案されているように、単にオブジェクトを渡すことができます。

于 2012-06-20T13:30:41.107 に答える
0
var submitHandler = function (data) {
    data.link; // Do something...
    data.form; // Do something...
    ...
};

submitHandler({
    link: "foo",
    form: "form",
    close: "close"
});​
于 2012-06-20T13:20:23.547 に答える
0

独自のオブジェクトを作成して送信できます。データにアクセスしたい場合にも簡単です。 http://www.howtocreate.co.uk/tutorials/javascript/objectsは、独自のオブジェクトを作成する方法を示しています

于 2012-06-20T13:21:10.330 に答える
0

これは、多くのパラメーターを受け取る関数で使用するようになったパターンです (ただし、jQuery を使用します)。

var myFunc = function (parameters) {
    // any parameters not passed will be defaulted here
    parameters = $.extend({
        foo: 1,
        bar: 'hello',
        biz: false
    }, parameters || {}); // default parameters to an empty object if it is not passed at all

    // use the parameters like you normally would
    var answer = 6 + parameters.foo;
};

// call the function using an object
myFunc({ foo: 2, bar: 'goodbye'}); // notice biz will be defaulted to false

jquery を使用したくない場合は、$.extend(未テスト)の代わりにこのようなものを使用できます。

var extend = function (defaultObject, sourceObject) {
    for (var key in defaultObject) {
        if (!sourceObject.hasOwnProperty(key)) {
            sourceObject[key] = defaultObject[key];
        }
    }
    return sourceObject;
};
于 2012-06-20T13:25:02.750 に答える
-2

はい、あなたは以下のようにすることができます

var submitHandler = function ($link, $form, close) {
   var obj ={
 val = $form.valid();
 action = $form.attr('data-action')
 entity = $form.attr('data-entity')
 href = $form.attr('data-href');
 rownum = $link.attr('data-row');
 $row = $('#row_' + rownum);
 $submitBt = $('.block-footer button:contains("Submit")');};
   jsonSuccessModal(obj);

}
于 2012-06-20T13:21:44.730 に答える