2010-12-13 5 views
3

Javascript를 배우면서 프로토 타입 소스 코드를 읽었습니다. 네이티브 객체를 확장하는 데 사용되는 코드가 어디에 있는지 궁금합니다.Prototype은 어떻게 객체를 확장합니까?

내가 보게되었습니다,

사방에
Object.extend(Function.prototype, (function() { 
Object.extend(String.prototype, (function() { 
Object.extend(Number.prototype, (function() { 

과 .extend 기능이 어디에서 오는 내가 찾을 수 없습니다.

나는 본 적이 : 라인 194-198과 경이에

function extend(destination, source) { 
    for (var property in source) 
     destination[property] = source[property]; 
    return destination; 
    } 

이가 하나 인 경우. 나는 그것이 무엇인지 알 수 없다.

어쨌든, 내 질문은 위에서 언급했듯이 프로토 타입이 네이티브 객체를 확장하는 방법입니다. 여기에 소스 코드를 보면

답변

3

예, 당신이 볼 수있는 기능입니다, 나중에 코드에서 다음과 같이 표시됩니다에 추가

extend(Object, { 
    extend: extend, //here's where the magic gets added 
    inspect: inspect, 
    toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, 
    toQueryString: toQueryString, 
    toHTML: toHTML, 
    keys: Object.keys || keys, 
    values: values, 
    clone: clone, 
    isElement: isElement, 
    isArray: isArray, 
    isHash: isHash, 
    isFunction: isFunction, 
    isString: isString, 
    isNumber: isNumber, 
    isDate: isDate, 
    isUndefined: isUndefined 
}); 

그래서이 속성으로 자체 extend() 전화 : 그것은이 같은 Object.extend를 가져 오는 데 사용프로토 타입은 Object.extend 메서드로 추가되었습니다.

+0

나는 여기서 당신이 의미하는 것을 얻을 것이라고 생각한다 : keys : Object.keys. 그래서 Object.keys는 실제로 Object 속성입니다. 다른 '|| 열쇠는 여기 있니? –

+0

@Thorpe - 이미 Object.keys (네이티브 브라우저 버전)를 가지고 있다면, 그 파일에 정의 된'keys' 함수를 사용하십시오 : https://github.com/sstephenson /prototype/blob/master/src/prototype/lang/object.js#L308-317 –

+1

나는 그렇게 생각했다. 나는 당신의 대답이 사물을 설명 할 때 가장 좋다고 믿는다. +1 –

관련 문제