2017-02-12 1 views
2

You don't know JS type & grammar에는 1 장 끝에 디자인 패턴 "dependency injection"이 표시되어 있습니다.이 패턴은이 장의 요점은 아니지만이 예제에서는 혼란 스러웠습니다. 자바 스크립트의 디자인 패턴

예제 코드

은 여기에 있습니다 :

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 함수 내에 쓰여지는 default 함수를 호출합니다. 오직 featherxyz는 디폴트 함수가 버려지는 dosomething 함수의 바깥쪽에 존재했다. – teek

0

기본적으로 || 연산자는 null 또는 정의되지 않은 경우 첫 번째 값을 반환합니다. 일치하면 두 번째 값을 반환합니다. 예 :

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

x가 널이 때문에 z5는 동일하게 설정 될 것이다. x이 예를 들어 4 일 경우 y4으로 설정됩니다.

자바 스크립트에는 기능이있는 모든 매개 변수를 전달할 필요가없는 기능 (또는 이상한 점, 뷰어에 따라 다름)이 있습니다. 다음과 같은 기능이있는 경우 예를 들어, :

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

를 당신이 제공되지 5 경우 y에 의해 x를 곱 때문에, y을 통과하지 않고 함수를 호출 (따라서 정의되지 않은) 경우는 오류가 발생하지 않을 .

예가 작동하는 방식입니다. helperFeatureXYZ과 같게 설정합니다. 그렇지 않으면 인수로 전달되지 않습니다. doSomethingCool() (따라서 정의되지 않음) 기본 기능으로 설정됩니다. 그 방법으로 나중에 코드에서 helper()을 실행할 때 전달 된 함수 또는 주어진 함수가없는 경우 기본 함수를 사용합니다.