繁体   English   中英

在javascript中,相同的代码解析不同函数中的参数 - 复制与否?

[英]in javascript, same code parsing arguments in different functions - copy or not?

有一系列函数,每个函数都相同地解析它的参数。 现在,这个解析块被剪切并粘贴到每个函数的开头。 有一个更好的方法吗?

Post.update = function( e ) {

        // parse args
        var e, el, orig_el, args, render, callBack;
        for( var i=0; i<arguments.length; i++ ) {
                if( arguments[i] instanceof HTMLElement ) orig_el = arguments[i];
                else if( arguments[i] instanceof Render ) render = arguments[i];
                else if( arguments[i] instanceof Event ) {
                        e = arguments[i];
                        orig_el = orig_el || e.target;
                }
                else if( typeof arguments[i] == 'function' )  callBack = arguments[i];
        }

        // Post.update work here
}

Post.verify = function( e ) {

       // parse args
       ...

       // Post.verify work here
}

解析原因而不是单独传递的原因是,有五个+可能的args

  • 我很容易在命令和遗漏中使用一长串args来调用funcs时出错

  • 将一个参数更改为函数意味着更改对func的每个调用

  • imho一个具有五个参数的函数与通过必要的函数相比是非常难以理解的

所以我的目标是抽象函数的解析部分,同时保持函数调用的清晰度。

而不是从函数中解析5个参数,你应该意识到函数不应该有超过3个参数。

你要做的是让最后一个参数成为一个对象

Post.update = function(ev, obj) {
  // obj.el
  // obj.render
  // obj.ev
  // obj.cb
}

然后只需要一个可以重复使用的功能

Post.parseObj = function(obj) {
  ...
} 

Post.update = function(ev, obj) {
  obj = Post.parseObj(obj);
}

当然你应该使用一个函数来防止复制和粘贴所有代码!

如果要更改代码中的单个字符,该怎么办? 现在你必须再次复制和粘贴所有内容! 那真的不好。

将该代码粘贴到函数中并每次调用它,这样当您在代码函数中更改某些内容时,更改将反映到使用该函数的每个位置。

你是否担心将这么多参数传递给函数? 你真的要担心,因为传递这么多参数到函数中真的很糟糕。 只需将所有参数都粘贴到单个对象中,然后只将该对象传递给函数,如下所示:

var arg = {
    arg1: 'bla bla bla',
    arg2: 4,
    //.....
};

// call the function passing only one parameter
myFunction( arg );

然后在函数内部你将有一个参数,你可以像这样访问所有其他参数:

function myFunction( arg ) {
    // arg.arg1
    // arg.arg2 ...
}

定义一次函数并重用它们

var update = function (e) { /* etc */ }
Post.update = update;

为什么不使用Post.parseArgs函数?

Post.parseArgs = function(args)
{
    // parse args
    var e, el, orig_el, args, render, callBack;
    for( var i=0; i<arguments.length; i++ ) {
            if( arguments[i] instanceof HTMLElement ) orig_el = arguments[i];
            else if( arguments[i] instanceof Render ) render = arguments[i];
            else if( arguments[i] instanceof Event ) {
                    e = arguments[i];
                    orig_el = orig_el || e.target;
            }
            else if( typeof arguments[i] == 'function' )  callBack = arguments[i];
    }
    // return what you want...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM