2010-03-03 8 views
5

그래서 John Resig의 blog을 읽고 자신의 micro-templating javascript engine을보고 프로토 타입 상속에 대한 이해를 깊게하기 위해 자바 스크립트 용 템플릿 관리 시스템을 직접 구현하려고했습니다. . 그러나, 내가 그것을 쓰기 시작한 순간, 나는 문제에 부딪쳤다.어떻게 부모 객체 함수를 자바 스크립트의 자식 객체에서 호출합니까

function template_manager() { }; 

template_manager.prototype = { 
    tags: {}, 
    templates: {}, 
    output: {}, 
    default_template: "default", 
    set: function (tags, template_name) { 
     template_name = "Greetings!"; 
     //template_name = this._util.template(this.nothing, this.default_template); 
     console.log(template_name); 
    }, 
    get: function(tags, template_name) { 
     console.log("Getting"); 
    }, 
    unset: function(tags, template_name) { 
     console.log("Removing"); 
    }, 
    render: function(template_name) { 
     console.log("Rendering"); 
    }, 
    //_util goes here 
}; 

// Take it for a quick test drive. 
test = new template_manager; 
test.set(); 
test.get(); 
test.unset(); 
test.render(); 

가 그럼 난 몇 가지 일반적인 코드 작업을 시작하고, 나는 유틸리티 오브젝트에 넣어하기로 결정 :

_util: { 
     // Used to set the default values for optional arguments 
     optional: function(obj, def_value) { 
      return (typeof obj === "nothing") ? obj : def_value; 
     }, 
     template: function(template_name) { 
      return this._util.optional(template_name, this.default_template); 
     }, 
    }, 

그리고 지금

가 시작하려면 여기 내 기본 코드입니다 , 내 _util.template() 함수를 내 set() 함수에서 호출하려고 할 때 thistemplate_manager 객체가 아닌 _util 객체를 가리 키기 때문에 물론 오류가 발생합니다. jQuery extend 메서드를 살펴 보았습니다. 그리고 나는 그것이 무엇을하는지 이해하고 있다고 생각합니다. 내 질문은, 내가 내 자신의/jQuery의 사용을 구현하려면 extend 메서드가 필요합니까 아니면 내 _util 개체에서 template_manager 개체를 호출하는 또 다른 방법은 무엇입니까?

(PS I 더글러스 크록 포드의 article 프로토 타입 상속에 검토 한 결과, 나는 대답이 생각 ,하지만 난 아직 완전히 이해하지 않는 두려워.)

+0

@Chris는 이중 검사를하지 않아도됩니다. 그것을 잡아 주셔서 감사합니다! –

답변

8

당신은 사용할 수 있습니다 call 또는 즉

template_manager.prototype = { 
    set: function (tags, template_name) { 
     template_name = "Greetings!"; 
     template_name = this._util.optional.call(this, this.nothing, this.default_template); 
     console.log(template_name); 
    } 
} 

apply 더 명시 적 설명은 "Getting Out of Binding Situations in JavaScript" 기사를 참조하십시오.

+0

솔루션이 작동하고 기사에서 범위를 자세히 설명하는 훌륭한 작업을 수행합니다. Li0liQ 대단히 감사합니다! –

+0

@Sean Vieira, 여러분은 환영합니다. – Li0liQ

관련 문제