솔루션은 조금 너무 명백한 것, 그래서 문제가 원래 코드에 액세스하지 않는 것이 있는지 궁금 해요, 당신은보다 동적 인 솔루션이 필요합니다.
그렇다면 하나의 옵션 은으로 생성자를 사용자 지정 생성자로 재정의하고 원본을 호출 한 다음 개체를 업데이트해야합니다.
원래 코드 :
some.thing = function() {
this.somefn = function() { // this is the function that I need to fix
...
}
}
귀하의 코드 : 이제
// cache a reference to the original constructor
var _thing = some.thing;
// your constructor
some.thing = function() {
// invoke the original constructor on the new object.
_thing.apply(this, arguments);
this.somefn = function() { /*your updated function*/ };
};
// maintain inheritance
some.thing.prototype = Object.create(some.thing.prototype);
// make an instance
var theThing = new some.thing();
원래 생성자와 프로토 타입 체인의 이익을 얻고 있지만, 당신은 자신의 기능을 bjects가 생성되고 있습니다.
대체 한 원래 함수가 원래 생성자의 가변 범위를 특수하게 사용할 수있는 경우에만 문제가 발생할 수 있습니다. 그렇다면 해결해야 할 문제가 있습니다.
사용자가 호출하기 전에 덮어 쓴 원래의 메소드를 유지하고 호출 할 수 있습니다. 이 상황이 그렇게 부르는지 확실하지 않습니다.
왜 내부 기능이다
건배 여기 –
아니요 ... 새로 만든 인스턴스마다 'obj.somefn'을 덮어 쓸 수 있습니다. –
@FelixKling OP가 선언을 제어하지 않고 프로토 타입 ... –