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

在javascript中,相同的代码解析参数在不同的函数中-复制还是不复制?,javascript,function,syntax,readability,Javascript,Function,Syntax,Readability,具有一系列函数,每个函数都以相同的方式解析其参数。现在,这个解析块被剪切并粘贴到每个函数的开头。有更好的方法吗 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] ins

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

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 } Post.update=函数(e){ //解析参数 变量e、el、orig_el、args、render、callBack;
对于(var i=0;i定义一次函数并重用它们

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...
}
Post.parseArgs=函数(args)
{
//解析参数
变量e、el、orig_el、args、render、callBack;

对于(var i=0;i,您应该意识到函数的参数不应该超过3个,而应该从函数中解析5个参数

您要做的是将最后一个参数设为对象

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 arg = {
    arg1: 'bla bla bla',
    arg2: 4,
    //.....
};

// call the function passing only one parameter
myFunction( arg );
function myFunction( arg ) {
    // arg.arg1
    // arg.arg2 ...
}

不要按照你所说的让两个不同的函数以相同的方式解析参数——每个函数都是在我理解你的时候定义的,有点像Ruby with with without Ruby的语法帮助。这需要在传递参数之前将参数放入object中,并且在函数中的使用是一级间接的,例如,
obj.el
而不是
el
@cc_young,如果这会造成明显的性能差异,您可以始终将它们设置为本地。是的,散列对象是用户向函数中插入大量参数的最佳方式。想想
$。ajax
是否有类似php的
提取
的东西可以将属性从我是一个对象,并将它们放入本地范围?@cc_young no.你为什么在意,你的微优化设备因此
Post.parseArgs
将在
Post.update
中调用-然后我们下一步就是将变量从
parseArgs
中取出并放入函数
update
1)如果参数卡在对象中,那么由于属性名的原因,就不需要函数来解析参数了——这就是您在最后所说的。2)对我来说,这并不是太令人满意,而是比五个ARG更好。3)这些函数也充当事件触发器,所以也需要作为一个包装器。你可以在函数调用中传递一个在RealDeCyl上创建的对象,而不需要创建它并把它存储到一个变量中,它只是一个文字对象。如果你不需要PAR。使用它们是因为对象中已经有了它们,这样更好,您根本不需要该函数:)明白。它变得非常类似于scheme中的命名参数等。同意它的实用性,但不迷恋美学。然后,小问题就像只有一个按名称命名的属性(arg解析,您可以有任何数字)触发器使用的funcs让我更喜欢解析——尽管我同意你所说的一切。没关系,但我建议你开始使用这些对象,因为它们在JS编程中非常有用:)