2015-01-21 1 views
0

편집 :MyConstructorFunc.prototype을 '_.extend()'에 전달했습니다.Underscorejs가 개체로 함수를 변경합니다.

Underscore를 사용하여 함수를 확장하려고 할 때 흥미로운 구현 세부 사항에 접했습니다.

var MyConstructorFunc = function() { 
    ... 
} 

내가 함수 생성자를 내장

,

는 내가 다시있어 typeof MyConstructorFunc == "object"이었다 무엇

return _.extend(MyConstructorFunc.prototype, { 
    \\ ...some properties... 
} 

의 결과를 반환! _.extendfunction에 속성을 병합하는 경우 object을 반환하는 이유는 무엇입니까?

_.extend = function(obj) { 
    if (!_.isObject(obj)) return obj; 
    var source, prop; 
    for (var i = 1, length = arguments.length; i < length; i++) { 
     source = arguments[i]; 
     for (prop in source) { 
     if (hasOwnProperty.call(source, prop)) { 
      obj[prop] = source[prop]; 
     } 
     } 
    } 
    return obj; 
    }; 

내가 MyConstructorFunc["someProp"] = someObject["someProp"]한다면 ... 그런 일이 어디 볼 ​​수 없어 _.extend 기능을 살펴보면 및 return MyConstructorFunc, 나는 자바 스크립트 object을 반환? 내가 뭔가를 누락

...

+0

이 오류를 재현 할 수 없습니다. 'MyConstructorFunc' 함수의 내용과 전달할 객체를'_.extend' 함수에 게시 할 수 있습니까? –

+0

'_.isFunction (_. extends (MyConstructorFunc, {...}))'의 결과가'true'를 리턴 했습니까? – seebiscuit

답변

2

당신은 아마 _.extend하는 기능 객체를 전달한다. 샘플 코드에는 표시되지 않지만 "new"키워드를 사용하여 MyConstructorFunc의 새 인스턴스를 만드는 경우 결과는 객체가됩니다.

var MyConstructorFunc = function() { 
} 

var foo = _.extend(MyConstructorFunc, {a:1}); 
console.log(typeof foo); // function 

var funcObj = new MyConstructorFunc(); 
console.log(typeof funcObj); //object 

MyConstructorFunc 자체를 확장하면 함수 유형이 반환됩니다. 일단 컨스트럭터를 사용하여 객체를받는 새로운 함수를 만들면됩니다.

+0

Thanks @BrianTovar 중요한 세부 정보를 추가하는 것을 잊어 버렸습니다. 수정 된 코드를 참조하십시오. – seebiscuit