Javascript 传递一个方法以调用Obj作为Param

Javascript 传递一个方法以调用Obj作为Param,javascript,Javascript,我最初想问如何做,但似乎可以传递方法名,就像传递属性名一样。这是一个坏习惯吗?有什么理由不做吗 var actionsObj = { writeSomething: function(){console.log('lol');} } function doSomeAction(writeSomething){ actionsObj[writeSomething](); }; doSomeAction('writeSomething'); //execut

我最初想问如何做,但似乎可以传递方法名,就像传递属性名一样。这是一个坏习惯吗?有什么理由不做吗

  var actionsObj = {
    writeSomething: function(){console.log('lol');}
  }

  function doSomeAction(writeSomething){
    actionsObj[writeSomething](); 
  };

  doSomeAction('writeSomething'); //executes writeSomething method of actionsObj

这不是一个坏习惯,实际上是一件很平常的事


它主要用于代码分离,或进行一般实现,例如,带有自定义回调的http请求。

这不是一种坏做法,实际上是一种常见做法

它主要用于代码分离,或进行一般实现,例如,带有自定义回调的http请求

这是一个坏习惯吗

没有

有什么理由不做吗

这取决于你需要什么。将“动词”传递给函数以从一组预设动作中进行选择是非常有限的,传递函数本身(“回调”)允许调用方传递任意代码

因此,如果您想限制可能的操作,或者如果一组有用的操作受到您的域需求的限制,那么这种模式是合适的。不管怎样,这并不重要,但在其他情况下,它感觉有点不灵活

比较

function doSomeAction(actionName){
    var actionsObj = {
        writeSomething: function(x){ console.log(x); },
        …
    };
    actionsObj[actionName]('lol'); 
}

doSomeAction('writeSomething');
doSomeAction('someOtherOption'); // restricted by the callee
…

主要的区别在于代码中给出了可能的操作。
doSomeAction
是否需要了解所有这些,它们是否每次都相同

这是一个坏习惯吗

没有

有什么理由不做吗

这取决于你需要什么。将“动词”传递给函数以从一组预设动作中进行选择是非常有限的,传递函数本身(“回调”)允许调用方传递任意代码

因此,如果您想限制可能的操作,或者如果一组有用的操作受到您的域需求的限制,那么这种模式是合适的。不管怎样,这并不重要,但在其他情况下,它感觉有点不灵活

比较

function doSomeAction(actionName){
    var actionsObj = {
        writeSomething: function(x){ console.log(x); },
        …
    };
    actionsObj[actionName]('lol'); 
}

doSomeAction('writeSomething');
doSomeAction('someOtherOption'); // restricted by the callee
…


主要的区别在于代码中给出了可能的操作。
doSomeAction
是否需要了解所有这些问题,它们是否每次都相同?

如果它能巧妙地解决您的问题,则没有理由不了解。是的。这很好。完全没有问题,您可以使用:typeof writemething==“function”来验证参数。好的,谢谢大家。很难找到所有出现的
writemething
执行,因为开发人员可以编写类似
doSomeAction('write'+'something')的东西。
没有理由不,如果它能很好地解决你的问题。这很好。完全没有问题,您可以使用:typeof writemething==“function”验证参数好的,谢谢大家。很难找到所有出现的
writemething
执行,因为开发人员可以编写类似
doSomeAction(“write'+'某物”)
writemething就是“writemething”,我只是将参数命名为与字符串相同的名称,因为我正在快速编写此WriteMething是“WriteMething”,我只是将参数命名为与字符串相同的名称,因为我正在快速编写此名称,我不确定我是否完全理解(与我在JS回调方面的经验非常有限有关)。在这种情况下,我会传递actionsObj并调用它的方法吗?不,你会传递action方法本身,你很可能连那个对象都没有。您是否有这样一个“可用操作的对象”取决于您的用例——如果它看起来合理,那么动词模式就可以了。我不确定我是否完全理解(这与我对JS回调的经验非常有限有关)。在这种情况下,我会传递actionsObj并调用它的方法吗?不,你会传递action方法本身,你很可能连那个对象都没有。您是否有这样一个“可用操作的对象”取决于您的用例——如果它看起来合理,那么动词模式就可以了。