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方法本身,你很可能连那个对象都没有。您是否有这样一个“可用操作的对象”取决于您的用例——如果它看起来合理,那么动词模式就可以了。