2017-01-22 1 views
0

ES6 매개 변수 개체를 사용하여 구조적 해체를 수행하면 특정 속성의 존재를 요구할 수 있으며 default values을 제공 할 수 있습니다. Dr. Axel RauschmayerSix nifty ES6 tricks article에서 매개 변수 기본값은 실제로 사용될 때만 평가됩니다.매개 변수 개체 필수 값 및 빈 개체를 사용하여 소멸

다음 예제는 이해가 안 무엇에 대한 자세한 내용을 제공합니다 :

function ajax({ 
    type = requireParameter("type"), 
    url = requireParameter("url"), 
    data = requireParameter("data"), 
    success = requireParameter("success"), 
    error = requireParameter("error"), 
    isAsync = requireParameter("isAsync") 
    } = {}) { 
    console.log(JSON.stringify({ 
     type, 
     url, 
     data, 
     success, 
     error, 
     isAsync 
    }, null, 2)); 
}; 

function requireParameter(name) { 
    throw new Error (`Missing parameter "${name}"`); 
} 

try { 
    ajax({ 
    type: "get", 
    url: "http://my.api.io", 
    data: {}, 
    success:() => {}, 
    error:() => {}, 
    isAsync: true 
    }); 
} catch (e) { 
    console.warn(e.message); 
} 

같은 동작을합니다 ajax 첫 번째 인수 기능에 {...} = {}하거나 {...}을 가졌어요. 그래서 두 가지 옵션 중 하나를 테스트 할 때 나는 {...} = {} 로직이하는 일을 결론 지을 수 없습니다. 나는 여기에서

질문 :

왜 우리는 ajax 함수의 첫 번째 인수에 비어있는 객체에 동일하게 객체를 필요합니까?

+1

는'{...} = {}'함수의 매개 변수는 단순히 디폴트 값의 경우를 설정 전달 된 인수는 정의되지 않습니다. – Phillip

+0

예,하지만 왜 그게 필요합니까? '{...} = {}'또는 단지'{...} '를 갖는 것은 동일한 출력을 가질 것입니다. –

+1

이렇게하면 'ajax (undefined)'라고 상상해보십시오. destructure undefined를 사용할 수 없기 때문에 전체 유형 검사는 쓸모 없습니다. 그래서 첫 번째 인수의 기본값을 비어있는 객체로 설정하면됩니다. :) – Phillip

답변

1

매개 변수가없는 경우 의도 한 동작이 예외를 throw하는 것이므로 특정 예제에서는 소멸 된 개체를 빈 개체로 기본 설정하지 않아도됩니다. 이 인수를 제공하지 않을 경우에 대한 그래서 같은 속성의 사용하면 개체를 기본 수 :

function ajax({ 
 
    type = requireParameter("type"), 
 
    url = requireParameter("url"), 
 
    data = requireParameter("data"), 
 
    success = requireParameter("success"), 
 
    error = requireParameter("error"), 
 
    isAsync = requireParameter("isAsync") 
 
} = { 
 
    type: "get", 
 
    url: "http://my.api.io", 
 
    data: {}, 
 
    success:() => {}, 
 
    error:() => {}, 
 
    isAsync: true 
 
    }) { 
 
    console.log(JSON.stringify({ 
 
     type, 
 
     url, 
 
     data, 
 
     success, 
 
     error, 
 
     isAsync 
 
    }, null, 2)); 
 
}; 
 

 
function requireParameter(name) { 
 
    throw new Error (`Missing parameter "${name}"`); 
 
} 
 

 
try { 
 
    ajax(/* Don't provide anything and use the default */); 
 
} catch (e) { 
 
    console.warn(e.message); 
 
}

+0

하지만 언제 그럴 필요가 없습니까? –

+1

함수 사용 방법에 따라 다릅니다. 요구되는 논의가되기를 원하십니까? 그렇다면, 인수에 기본값을 사용하지 말고 이미 가지고있는'requireParameter' 구조체를 사용하십시오. 그렇지 않은 경우 적절한 기본값을 사용하십시오. –

+0

이것은 필요한 값 메카닉으로 매개 변수 오브젝트 소멸을 이해하는 예제 일뿐입니다. –

관련 문제