Javascript 正常功能和木偶命令之间有什么区别
在阅读了Javascript 正常功能和木偶命令之间有什么区别,javascript,function,marionette,Javascript,Function,Marionette,在阅读了marionete.Commands之后,我非常好奇地发现正常函数和marionete.Commands之间的区别 如果您定义了任何函数,您可以在任何地方调用该函数 正常功能: var normalFun=function(){alert("Normal Function")}; 同样的方法木偶。命令也以如下方式工作 //creating instance for Application class var myApp=new Marionette.Application(); //r
marionete.Commands
之后,我非常好奇地发现正常函数和marionete.Commands
之间的区别
如果您定义了任何函数,您可以在任何地方调用该函数
正常功能:
var normalFun=function(){alert("Normal Function")};
同样的方法木偶。命令也以如下方式工作
//creating instance for Application class
var myApp=new Marionette.Application();
//registering command
myApp.Commands.setHandler("functionName",function(){alert("This is just a normal function but way of defining as different in my point of view.")});
//whereever you want to call this command just run that command with corresponding name
myApp.Commands.execute("functionName");
在我看来,正常功能和木偶。命令都是一样的。如果它是正确的,那么为什么木偶
开发人员开发了这个木偶.命令
概念?要使用函数,您需要从相同的范围调用它,或者有一个对包含对象的引用。命令不是这样,因此它们允许解耦
假设当用户单击应用程序中的某个按钮时,您希望更改菜单的颜色。您可以在(例如)应用程序中管理标头的部分中定义changeColor
函数。然后,您可以通过在应用程序中的某个位置调用(例如)myHeader.changeColor()
来更改菜单颜色。但如上所述,这意味着您需要对myHeader
的引用才能调用其changeColor
方法
在开发应用程序时,您会发现实际上菜单本身变得非常复杂,直接更改自己的颜色(而不是让标题管理颜色)更有意义。现在,您需要进入应用程序并将myHeader.changeColor()
的每个实例更改为myMenu.changeColor()
。这是由于应用程序的各个位之间的耦合
如果您使用命令,您将从需要更改菜单颜色的位置执行命令,并在“header”部分定义处理程序。然后,当您决定更改应用程序设计时,您可以简单地移动处理程序,使其在“菜单”部分中定义。使用此解决方案,您不必更改实际调用来更改菜单颜色,因为它们是完全解耦的
使用这两种解决方案,您可以更改菜单颜色。但使用命令可以实现更好的解耦,减少后续工作。当然,这并不意味着您应该在任何地方使用命令:根据您的具体情况调整命令的使用(或不调整)。要使用函数,您需要从同一范围调用它,或者有对包含对象的引用。命令不是这样,因此它们允许解耦
假设当用户单击应用程序中的某个按钮时,您希望更改菜单的颜色。您可以在(例如)应用程序中管理标头的部分中定义changeColor
函数。然后,您可以通过在应用程序中的某个位置调用(例如)myHeader.changeColor()
来更改菜单颜色。但如上所述,这意味着您需要对myHeader
的引用才能调用其changeColor
方法
在开发应用程序时,您会发现实际上菜单本身变得非常复杂,直接更改自己的颜色(而不是让标题管理颜色)更有意义。现在,您需要进入应用程序并将myHeader.changeColor()
的每个实例更改为myMenu.changeColor()
。这是由于应用程序的各个位之间的耦合
如果您使用命令,您将从需要更改菜单颜色的位置执行命令,并在“header”部分定义处理程序。然后,当您决定更改应用程序设计时,您可以简单地移动处理程序,使其在“菜单”部分中定义。使用此解决方案,您不必更改实际调用来更改菜单颜色,因为它们是完全解耦的
使用这两种解决方案,您可以更改菜单颜色。但使用命令可以实现更好的解耦,减少后续工作。当然,这并不意味着您应该在任何地方使用命令:根据您的具体情况调整(或不调整)命令的使用。它们是相同的。我的意思是,在这条路上,一切都是一样的(一个函数),永远。哈哈
重要的是你能从中得到什么。因此,归根结底,这只是品味/专业性的问题(尊重模式、惯例等)
使用命令
,您可以将所有内容放在一个地方,只有myApp
负责在应用程序的模块/控制器/域/任何“功能最终结果”(引用非常好的书):)之间进行通信
长话短说:在大型应用程序中,只传递myApp
实例并从那里执行命令是有意义的
注意:当您使用RequireJS时,这就更有意义了
那更干净,更有条理。它们是一样的。我的意思是,在这条路上,一切都是一样的(一个函数),永远。哈哈
重要的是你能从中得到什么。因此,归根结底,这只是品味/专业性的问题(尊重模式、惯例等)
使用命令
,您可以将所有内容放在一个地方,只有myApp
负责在应用程序的模块/控制器/域/任何“功能最终结果”(引用非常好的书):)之间进行通信
长话短说:在大型应用程序中,只传递myApp
实例并从那里执行命令是有意义的
注意:当您使用RequireJS时,这就更有意义了
那更干净,更有条理。你的书刚刚写完。太棒了,谢谢!我刚开始写一本内容更高级的新书。敬请期待!(另外,您是否介意将您的反馈添加到?我将不胜感激。)您的书刚刚写完。太棒了,谢谢!我刚开始工作