2013-08-24 2 views
0

나는 자바 스크립트에 다음 함수를 쓰고 있어요 :자바 스크립트 함수에서 기본 옵션을 쉽게 재정의하도록 허용하는 방법은 무엇입니까?

Number.prototype.niceFormat(options) { 
    var defaultOptions = { 
     thousandSeparator: ',', 
     leftPad: 0, 
     decimalPlaces: 2 
    }; 
    if (typeof options.thousandSeparator != 'undefined' 
    && options.thousandSeparator != null) { 
     defaultOptions.thousandSeparator = options.thousandSeparator; 
    } 

} 

성가신 일이 내가 옵션을 완전히 유연하게 할 수 있습니다.

niceFormat({decimalPlaces: 3})을 호출하면 defaultOptions 속성이 decimalPlaces으로 바뀝니다.

defaultOptions에 속성이있는 횟수만큼 if 문을 쓰는 것을 싫어합니다.

defaultOptions의 속성 값을 유연하게 덮어 쓸 수있는 좋은 방법이 있습니까?

기본적으로 자바 스크립트의 객체에 대해 array_merge을 찾고 있습니다.

UPDATE :

내가 콴타스와 크레용와 폴 의견에서 답변을했다이 쓴 :

Number.prototype.niceFormat = function(options) { 
    var defaultOptions = { 
     thousandSeparator: ',', 
     leftPad: 0, 
     decimalPlaces: 2 
    }; 

    var env = defaultOptions; 
    if (typeof options != 'undefined') { 
     for (option in env) { 
      if (options.hasOwnProperty(option) 
      && typeof options[option] != 'undefined') { 
        env[option] = options[option]; 
      } 
     } 
    } 

어쨌든이 더욱 개선 할 수 있습니까?

+0

'options.option'을 사용하면'option'의 값이 아닌'option'이라는 속성을 찾습니다. 이 버전을 만들기 전에'options [option]' –

+0

을 사용하여 약 5 가지 편집을해야합니다. 괜찮아? –

+0

'defaultOptions'은 _function_ 내에 있으므로'options'의 속성을'defaultOptions'에 적용하고 나중에 속성을 확인할 때'defaultOptions'를 사용하십시오. 'defaultOptions'가 공유되면, _function_,'var env = {}'에 새로운 빈 _Object_를 만들고'defaultOptions'를 복사 한 다음'options'를 복사 한 다음'env'를 사용하십시오. –

답변

1

당신이해야 할 것은 모두 속성은, 다음에 할당하는 것이 포함 확인할 수 있습니다 :

for (var i in options) if (options.hasOwnProperty(i) && defaultOptions.hasOwnProperty(i)) defaultOptions[i] = options[i]; 

hasOwnProperty() 검사를 속성이 (되지 않은 프로토 타입 또는 무언가를 통해) 그 객체에 직접이라고하고 그것은 실제로 객체에 존재한다는 것입니다.

1
for (option in defaultOptions) { 
    if (typeof options[option]=='undefined') options[option] = defaultOptions[option]; 
}