在You don't know JS type & grammar中,设计模式称为"依赖注入"在第1章的末尾显示,我知道这不是本章的重点,但我对这个例子感到困惑。
示例代码在这里:
function doSomethingCool(FeatureXYZ) {
var helper = FeatureXYZ ||
function() { /*.. default feature ..*/ };
var val = helper();
// ..
}

所以我想使用这个功能。
因为我不知道FeatureXYZ是否存在,所以我不知道如何使用它。 如果不存在FeatureXYZ,doSomethingCool()将不使用FeatureXYZ和doSomethingCool(FeatureXYZ)将抛出错误。因此,该功能可能是无意义的功能。
答案 0 :(得分:0)
基本上,如果||
运算符不为null或未定义,则返回第一个值。如果是,则返回第二个值。例如:
var x = null;
var y = x || 5;
x
为空,因此z
将设置为5
。如果x
为4
,则y
也会设置为4
。
JavaScript具有功能(或奇怪,取决于查看器),您不必传递函数的每个参数。例如,如果您具有以下功能:
function(x, y) {
return x * (y || 5);
}
如果您在未传递y
的情况下调用该函数,则不会导致错误,因为如果未提供x
,它会5
乘以y
(因此未定义)。
这是示例的工作原理:它将helper
设置为等于FeatureXYZ
,或者,如果它不作为参数传递,例如doSomethingCool()
(因此未定义),它被设置为默认函数。那么在代码的后面,当你执行helper()
时,你要么使用传递的函数,要么使用默认的函数,如果没有给出的话。
答案 1 :(得分:0)
如果没有传递参数,您可以使用默认参数来设置要调用的默认函数,如果传递给函数,则可以使用参数。
使用括号表示法引用"FeatureXYZ"
对象或window
预期为属性的对象的属性"FeatureXYZ"
。如果未在对象上定义属性,则括号表示法不应抛出错误。
function FeatureXYZ () {
return {def:456}
}
function doSomethingCool(FeatureXYZ = window["FeatureXYZ"] /* obj["FeatureXYZ"] */) {
var helper = FeatureXYZ || function config() {
/*.. default feature ..*/
return {abc:123}
};
var val = helper();
// ..
return val
}
console.log(doSomethingCool());