2016-09-01 3 views
0

객체의 속성을 사용하여 변수를 해제하는 더 짧은 방법을 찾으려고합니다. 객체 속성을 사용하여 for 루프에서 변수 선언하기

내가

이 같은 매개 변수로 전달 된 "userOptions"개체를 가지고 : myFunction이에서

var example = new myFunction({ 
    maxLimit: 30, 
}); 

내가 가진 내가 변수로 옵션을 선언하는 userOptions 비교 "defaultOptions"라는 다른 객체입니다. 다음 예제는 이미 충분히 짧게 보일 수 있습니다. 그러나 옵션 수가 증가하면 비효율적이기 시작합니다.

function myFunction(userOptions) { 
    var defaultOptions = { 
     maxLimit: 20, 
     minLimit: 10 
    } 

    // Apply user options 
    for (var i in defaultOptions) { 
     if (userOptions.hasOwnProperty(i)) { 
      defaultOptions[i] = userOptions[i]; 
     } 
    } 

    // Declare variables 
    var maxLimit = defaultOptions.maxLimit; 
    var minLimit = defaultOptions.minLimit; 
} 

This question는 내가 뭘하려고 오전에 조금 비슷하다. 그러나 대답은 내가 이미했던 것처럼 객체 속성에 하나씩 접근하는 것을 제안합니다.

이 작업을 수행하는 더 좋은 방법이 있습니까? for 루프에서 변수를 선언하거나 업데이트 된 옵션 객체의 속성을 변수로 추출하는 것과 마찬가지로? 당신이 Object.assign 찾고있는 것처럼

+1

그것은 당신이 달성하기 위해 노력하고 무엇을 조금 불분명합니다. 원하는 값을 가진이'defaultOptions' 객체를 가지고 있다면 왜 그 객체를 통해 접근할까요? I.E., 어디에서든지'maxLimit'에 접근하고 있다면,'defaultOptions.maxLimit' 만 써라. (대괄호 문법을 사용할 필요가 없다.) –

+0

그게 바로 대부분의 라이브러리 (예 : jQuery 및 jQuery UI)입니다. 아마 편의를 위해 자주 사용되는 몇 가지 옵션을 제외하고. – Barmar

+0

'defaultOptions'와 같이 긴 이름을 계속 입력하지 않으려면'var do = defaultOptions;'와 같은 짧은 이름을 지정할 수 있습니다. 그럼 그냥 do.maxLimit입니다. – Barmar

답변

1

가 보인다, 오른쪽 인수를 왼쪽으로 객체의 속성을 중복 덮어 쓰기 :

var config = Object.assign(defaultOptions, userSuppliedOptions); 
:처럼 사용할 수

console.log(Object.assign({ id: 1, name: 'Hello' }, { name: 'World' }));


대신 당신은 그냥 평범한 변수를 원하는 당신은 또한 일을 더 간결하게 destructuring assignment를 사용할 수 ES6에 접속이됩니다

let { minLimit, maxLimit } = defaultOptions; 
+0

그의 질문은 객체를 병합하는 방법이 아닌 일반 변수에 할당하는 것에 관한 것입니다. – Barmar

+0

@Barmar - 그 점을 지적 해 주셔서 감사합니다. 나는 여전히 이것이 일반적인 변수에 할당하는 것보다 더 나은 해결책이 될 수 있다고 생각한다. 그래서 나는 당분간 그것을 남겨 둘 것이다. –

+0

이것은 'for' 루프와 어떻게 다릅니 까? – Barmar

관련 문제