命令模式 JavaScript 中的执行函数
Execute function in command pattern JavaScript
我目前正在阅读Addy Osmani的JavaScript设计模式,可以在这里找到:http://addyosmani.com/resources/essentialjsdesignpatterns/book/。
我发现它非常愉快,非常有帮助。 我确实对书中的一种模式有疑问,即命令模式。
在书中,Addy 解释了命令模式有助于更好地分离对象和方法调用。
这是我对他的例子的版本:
var person = {
sayName: function (name) {
return "My name is " + name;
},
sayAge: function (age) {
return "My age is " + age;
},
sayGender: function (gender) {
return "My gender is " + gender;
}
}
person.execute = function (name) {
return person[name] && person[name].apply(person, [].slice.call(arguments, 1));
}
console.log(person.execute("sayName", "Sethen"));
魔术是在执行方法中完成的。 如您所见,您传递方法名称和参数,该方法负责其余的工作。
我的困惑源于execute
方法实际上返回的内容。 当你看到它时,它看起来像是与&&
短路,我一直认为由于JavaScript转换而返回了一个布尔值。
但是,如果您尝试使用代码,它完全可以正常工作,记录My name is Sethen
。
此外,我发现简单地使用return person[name].apply(person, [].slice.call(arguments, 1);
会产生相同的结果,并且在我看来更容易阅读。
因此,我的问题是return
在原始execute
方法中如何工作:
return person[name] && person[name].apply(person, [].slice.call(arguments, 1));
以及在这种情况下&&
运算符如何工作以使其工作?
&&
运算符并不总是返回 boolean
。它返回它计算的最后一个子表达式的值。如果请求的方法名称存在,则该表达式将返回.apply()
调用的结果。
所以:
return person[name] && person[name].apply(person, [].slice.call(arguments, 1));
方法:
if (!person[name])
return person[name];
return person[name].apply(person, [].slice.call(arguments, 1));
在这种情况下,&&
的行为有点像 if 语句。
如果您要传入不是该对象上的方法的东西,它将是假的,并且不会继续执行语句的其余部分。
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- javascript自执行函数-不同的语法
- JavaScript:只有当数组中的所有项都为true时才执行函数
- iFrame url更改时执行函数
- 为什么AngularJS在每个摘要循环上都执行函数
- 如何使用setInterval执行函数
- 当*ngFor以角度2结束时执行函数
- Ajax调用完成后如何执行函数
- 在显示引导弹出窗口之前执行函数
- 从自执行函数返回函数的Javascript性能命中率
- 在操作完成时执行函数
- jquery/js中的自执行函数
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数
- 构造函数函数中的自执行函数的OO上下文/范围
- Javascript未使用=运算符执行函数
- AngularJS:如何按照预定义的顺序执行函数
- 在不使用隔离作用域的情况下执行函数的角度指令
- 如何在页面加载后执行函数是在 AngularJS 中完成的
- 完成页面加载后执行函数
- 如何在完成完全执行函数后触发循环