我目前正在阅读 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));
以及&&
操作员在这种情况下如何工作以使其工作?