1

Underscore.js를 사용하면 defaults()을 사용하여 개체에 기본값을 적용 할 수 있습니다.Javascript 프로토 타입보다 defaults()를 선호하는 이유는 무엇입니까?

var defaultProperties = { flavor : "vanilla", sprinkles : "lots" }; 
var iceCream = {flavor : "chocolate"}; 
_.defaults(iceCream, defaultProperties); 

그러나 자바에서는 프로토 타입을 사용하여 기본값을 구현할 수 있습니다.

var defaultProperties = { flavor : "vanilla", sprinkles : "lots" }; 
var iceCream = Object.create(defaultProperties); 
iceCream.flavor = "chocolate"; 

Underscore.js 'defaults()의 장점과 사용 사례는 무엇입니까?

답변

4
  1. 대부분 가용성.

    Object.create()ES5-compatible browsers으로, _.defaults()은 이전의 ES3 기반 브라우저 (IE8, IE7 등)에서 작동합니다.

  2. 또한 객체에 대해서는 create()이 아닙니다.

    개체가 이미있는 경우 원하는 상속을 설정하기 위해 사실 [[Prototype]]을 변경할 수 있다는 것을 믿을 수 없습니다.

    일부 브라우저에서는 가능하지만 not standard입니다.

  3. 1 개 이상인 경우 defaults 개체를 사용하면 더 쉽게 작업 할 수 있습니다.

    _.defaults(options, config, defaults); 
    

    프로토 타입 체인에서는 가능하지만이를 설정해야합니다.

    var iceCream = Object.create(config); 
    iceCream.flavor = 'chocolate'; 
    

var defaults = { /* ... */ }; 

var config = Object.create(defaults); 
config.mixed = true; 

하지만, 일반적으로, 그들은 매우 유사한 목적을 제공합니다. 서로 다른 관점에서 그렇게합니다.

  • _.default() 누락 된 부분을 찾아서 설정합니다.
  • Object.create()은 프로토 타입 체인을 사용하여 누락 된 항목을 상속합니다.

그래서 사용하는 것은 크게 당신과 당신의 개인적 취향에 달려 있습니다.

+0

감사합니다. 마지막 단락을 읽으면서 한 가지 더 생각해보십시오.'defaults()'로 채워지는 객체는 나중에 속성에 접근 할 때 프로토 타입 체인을 탐색 할 필요가 없으므로 눈금이 빨라질 수 있습니다. – danijar

2

언더 코어의 기본값 기능을 사용하면 원하는 개체에 대한 유효성 검사 및 할당을위한 추가 코드를 작성하는 것을 제외하고는 전혀 차이가 없습니다. 이를 하나의 함수로 추상화하면 코드가 좀 더 의미 있고 깔끔하게 보일 것입니다. 어떤 유틸리티 유틸리티 기능이 있습니다. 여기

는 propeties의 집합을 통해 루프와 속성이 이미 개체에 존재하지 않는 경우, 지정, 밑줄의 기본값 기능

// Fill in a given object with default properties. 
    _.defaults = function(obj) { 
    each(slice.call(arguments, 1), function(source) { 
     if (source) { 
     for (var prop in source) { 
      if (obj[prop] === void 0) obj[prop] = source[prop]; 
     } 
     } 
    }); 
    return obj; 
    }; 
그것은 오브젝트를

및 매개 변수 값 세트의 원인 그것. 출처 : UnderscoreJS code on Github