2016-07-05 2 views
0

안녕하세요 저는 밑줄 확장 함수를 기반으로 만들려고합니다. 나는 이것을 할 방법이 없다. 다른 밑줄 속성의 다른 복제본을 만드는 데 성공했지만이 방법은 아이디어를 마음에 그리지 않는 것입니다. 다른 사람이 기본 javascript를 사용하여 ._extend를 만드는 방법과 함께 작동하는 방법을 설명 할 수 있기를 바랍니다. 다음은 시작 프레임입니다. 고맙습니다.밑줄의 확장 함수를 복제하려고하는 학생

var extend = function(obj){ 


} 
+0

당신은 소스 코드를 읽고 t보다 더 구체적인 질문을 가지고 올 수있는 다른 방법을 복제 한 경우 그의 작품은 어떻게 작동하는지에 대한 아이디어를 가지고 있습니다. 이 질문은 현재이 사이트에서 너무 광범위합니다. – charlietfl

+1

Underscore의 소스 코드 - 따라서 'extend' 구현은 [GitHub에서] (https://github.com/jashkenas/underscore/blob/master/underscore)입니다. .js). 관련 코드는 1061 행을 참조하십시오. –

답변

0

Object.keys (myObj)는 개체의 모든 키 (특성 이름)를 포함하는 배열을 제공합니다. 그런 다음이 배열을 반복하고 소스 객체의 값을 키 이름을 기반으로 대상 객체에 복제하는 것입니다.

dest['someAttr'] = origin['someAttr']; 

이 origin.someAttr의 값도 값 5

2
와 함께 dest.someAttr을해야 당신의 "이명 령은"개체 위를하고 후 5입니다 가정 :이 같은 객체 키를 복제 할 수 있습니다

Underscore extend 메서드는 기본적으로 destinationsources 인 두 개의 매개 변수를 받아들이고 destination 개체를 반환합니다. 기능을 복제하려면 간단한 Object.assign을 사용합니다.

예 : 당신이 발견하는 경우

var extendObject = function (destination, ...sources) { 
    return Object.assign(destination, ...sources); 
} 

는 방법은 위의 단지> = 당신이 ES의 낮은 버전에 대한 지원하려면, 당신은 단순히 할 수있는 2015 년,

var extendObject = function (destination, source) { 
    return Object.assign(destination, source); 
} 
ES에서 지원 Rest parameter를 사용

사용 분명히

var dest = {a: 1, b: 2}; 
var src1 = {c: 3, d: 4}; 
var src2 = {e: 5, f: 6}; 

// ES >= 2015 
extendObject(dest, src1); //{a: 1, b: 2, c: 3, d: 4} 
extendObject(dest, src1, src2); //{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6} 

// ES <= 5 
extendObject(dest, src1); //{a: 1, b: 2, c: 3, d: 4} 
extendObject(dest, src2); //{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}