gpt4 book ai didi

javascript - 在命令模式 JavaScript 中执行函数

转载 作者:搜寻专家 更新时间:2023-11-01 05:23:57 25 4
gpt4 key购买 nike

我目前正在阅读 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 转换而返回了一个 bool 值。

但是,如果您尝试使用该代码,它会按预期运行,记录 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));

关于javascript - 在命令模式 JavaScript 中执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com