2014-12-13 3 views
0

실제로 소스를 변경하지 않고 jquery 플러그인의 동작을 변경하려고합니다. 이 질문의 목적을 위해, 나는 나의 문제를 보여주는 간단한 예를 만들었다. 이 같은 글로벌 변수에 클래스 인스턴스 발생기를 부착 스크립트 파일이있는 경우 :개인 클래스 메서드 변경

(function(){ 

window.newMyClass = function(){ 
    return new myclass(); 
} 

function myclass(){ 
    var privateMethod = function(){ 
     return "private"; 
    } 
    this.publicMethod = function(){ 
     return privateMethod(); 
    } 
} 
})() 

그때 var instance = window.newMyClass()와 MyClass의 새로운 인스턴스를 얻을 경우를 instanceprivateMethod의 동작을 재정의 할 수있는 방법 등이있다 그 instance.publicMethod() 내 재정의 함수를 호출 할 것이라고? myclass를 하위 클래스로 만들 수 있다고 생각했지만 myclass 생성자가 바로 호출 된 함수 식에 범위가 있기 때문에이를 수행하는 방법을 모르겠습니다.

플러그인 소스를 변경하는 것이 더 좋습니까? 문제는 CDN을 사용하는 대신 직접 호스팅해야하며 업데이트가 출시 될 때마다 변경 사항을 다시 구현해야한다는 것입니다.

+0

유일한 것은 재정의'publicMethod'입니다. –

+0

"사적인"방법이라고 불리는 이유가 있습니다. –

답변

0

나는 이것을 잘 이해하는지 모르겠다. 아마, 그와 어떤 신비가 없기 때문에 :

(function(){ 

window.newMyClass = function(){ 
    return new myclass() 
} 

function myclass(){ 
    var privateMethod = function(){ 
     return "private"; 
    } 
    this.publicMethod = function(){ 
     return privateMethod(); 
    } 
} 
})(); 

var instance = window.newMyClass(); 

instance.publicMethod = function(){ 
     return "new method"; 
} 

console.log(instance.publicMethod()); 

뿐인 : 당신이 할 수있는 http://jsfiddle.net/r9evbzd2/1/

+0

어쩌면 당신이 한 일을 설명 할 수 있습니까? 그리고 왜? –

+0

publicMethod뿐만 아니라 클래스 전체에서 호출되므로 privateMethod 구현을 변경해야합니다. publicMethod는 최종 동작을 원하는 예제로 포함했습니다. publicMethod는 재정의 된 privateMethod 함수를 반환합니다. – noachr

+0

이것은 개인용 (액세스 가능하지 않은) 메소드를 대체하는 것에 관한 것입니다. 나는 제목을 제안한다 : ** 클래스의 인스턴스로부터 프라이빗 클래스 메소드를 변경한다 ** – Verhaeren

관련 문제