Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正常功能和木偶命令之间有什么区别_Javascript_Function_Marionette - Fatal编程技术网

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时,这就更有意义了


那更干净,更有条理。

你的书刚刚写完。太棒了,谢谢!我刚开始写一本内容更高级的新书。敬请期待!(另外,您是否介意将您的反馈添加到?我将不胜感激。)您的书刚刚写完。太棒了,谢谢!我刚开始工作