2017-02-12 13 views
2

You don't know JS type & grammarには、第1章の最後に「依存性注入」と呼ばれるデザインパターンが示されています。このパターンはこの章のポイントではありませんが、例では混乱しています。javascriptのデザインパターン

のコード例はここにある:

function doSomethingCool(FeatureXYZ) { 
 
    var helper = FeatureXYZ || 
 
     function() { /*.. default feature ..*/ }; 
 

 
    var val = helper(); 
 
    // .. 
 
}

だから私はこの機能を使用したいです。

FeatureXYZが存在するかどうかわからないので、使用方法はわかりません。 doSomethingCool()はFeatureXYZを使用せず、doSomethingCool(FeatureXYZ)はFeatureXYZが存在しない場合にエラーをスローします。したがって、関数は無意味な関数である可能性があります。

答えて

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());
多分

+0

ソリューションが、私の場合にはdosomethingcoolは、デフォルトの羽やfeatherxyzを使用するかどうかは全く機能は、我々が知らないcall.Asた方法は、外側環境にない依存すべきfeatherxyzの機能を使用すると、デフォルトのパラメータ方法を使用することができません(プロジェクトにファイルがあり、featurexyzが終了したかどうかわからないとします) – teek

+0

'FeatureXYZ'が存在しない場合の期待結果は?デフォルトの関数が呼び出されるか、関数が呼び出されませんか?つまり、「FeatureXYZ」の存在または非存在に関してあなたが実装している論理は何ですか? – guest271314

+0

は、dosomethingcool関数の中に書かれたデフォルトの関数を呼び出します。機能の外側にfeatherxyzしか存在しなかった場合、デフォルトの機能は削除されます。 – teek

0

基本的に、||演算子は、nullまたは未定義でない場合は最初の値を返します。そうであれば、2番目の値を返します。例:

var x = null; 
var y = x || 5; 

xはしたがってz5に等しく設定され、nullです。 xが例えば4である場合、y4に設定される。

JavaScriptには、機能に含まれるすべてのパラメータを渡す必要がないという特徴があります(または奇妙な点は、ビューアによって異なります)。あなたは、以下の機能がある場合たとえば、:

function(x, y) { 
    return x * (y || 5); 
} 

をあなたはそれが提供されていない5場合yxを掛けてしまうため、yを通過せずに関数を呼び出す(したがって、未定義の)場合はエラーになりません。

例は次のとおりです。helperFeatureXYZと等しく設定します。 doSomethingCool()(したがって定義されていない)、デフォルト関数に設定されます。そのようにしてコードの後半でhelper()を実行すると、渡された関数または与えられていない場合はデフォルトの関数を使用します。

関連する問題