2009-09-23 5 views
7

기본적으로이 패턴을 사용하여 기본 방법을 어떻게 호출합니까?Douglas Crockford의 기능 상속을 사용하여 Javascript에서 기본 메서드 호출

var GS = {}; 
GS.baseClass = function (somedata) { 
    var that = {}; 
    that.data = somedata; 

    //Base class method 
    that.someMethod = function(somedata) { 
    alert(somedata); 
    }; 

    return that; 
}; 

GS.derivedClass = function(somedata) { 
var that = GS.baseClass(somedata); 

//Overwriting base method 
that.someMethod = function(somedata) { 
    //How do I call base method from here? 

    //do something else 
}; 
return that; 
}; 

감사합니다.

답변

7
 
var GS = {}; 
GS.baseClass = function (somedata) { 
    var that = {}; 
    that.data = somedata; 

    //Base class method 
    that.someMethod = function(somedata) { 
    alert(somedata); 
    }; 

    return that; 
}; 

GS.derivedClass = function(somedata) { 
var that = GS.baseClass(somedata); 

//Overwriting base method 
var basemethod = that.someMethod; 
that.someMethod = function(somedata) { 
    //How do I call base method from here? 
    basemethod.apply(that, [somedata]); 
    //do something else 
}; 
return that; 
}; 

건배.

+0

Anatoliy, 왜이 경우 .apply 메서드를 사용해야합니까? basemethod (somedata)를 간단하게 호출 할 수 있습니까? – Sergey

+0

Apply는 "that"객체의 컨텍스트에서 "basemethod"함수를 실행합니다. 즉, "basemethod"메서드에서 "this"를 사용할 수 있습니다.이 링크는 해당 링크입니다. basemethod (somedata)를 사용하면이 경우 전역 (창) 컨텍스트에서 함수가 실행됩니다. 샘플 :

 window.myvar = 'window context var'; object = { myvar: 'object context var' }; var fun = function() { alert(this.myvar); } fun(); fun.apply(object); 
Anatoliy

+0

굉장, 고마워. – danjah

관련 문제