2016-12-11 1 views
0

여러 참조를 살펴본 결과 해결책을 찾을 수 없습니다! 내가 그나마기존 프로토 타입 메서드를 덮어 쓰고 동일한 'this'범위 유지

는 '원래의 프로토 타입 코드에 액세스 할 수

는 편집 :

는 이제 다음 이미 내 코드베이스에 존재하는 가정 해 봅시다 :

(function(){ 
    function Test() { 
     this.game = 'rods'; 
    } 
    Test.prototype.fail = function() { 
     setInterval(function() { 
      console.log('A', this.game); 
     }, 300); 
    } 
    var test = new Test(); 
    test.fail(); 
})(); 

난에 액세스 할 수 없습니다 원래 선언,이 내 코드베이스, 내가 뭘 하려는지 노력하고있어 실패 메서드의 기본 기능을 덮어 쓰는 방법이지만 여전히 THIS keywo의 인스턴스를 유지하고있다 rd. 출력이 지금 B로 시작되어야한다를 제외하고

setTimeout(function() { 
    Test.prototype.fail = function() { 
     setInterval(function() { 
      console.log('B', this.game); 
     }, 1000); 
    } 
}, 1000); 

내가, 동일한 출력을 볼 것으로 예상 것 :

나는 나의 목표는이 비슷한입니다, 많은 다른 것들을 시도했습니다 A

대신에 알려주세요.

+1

'.bind'가 아니며 모두 작동해야합니다. –

+0

@JaromandaX –

+1

과 같이 호출하면 'Utilities.prototype.add()'와 같이 작동하지 않습니다 ... 같은 것을 인스턴스화해야합니다. 'var x = new Utiltiies()'그러면'x.add()'가 코드를 실행합니다 –

답변

0

편집 : 고객님의 업데이트에 대한 답변

이 내용은 옳지 않습니다. 내가 의도 된 생각으로

Test.prototype.fail = function() { 
    setInterval(function() { 
     // since it's inside another function, 'this' no longer 
     // refers to the instance of Test, but the global 'window' 
     console.log('A', this.game); 
    }, 300); 
} 

그것은이 같은 작업을 할 것이다 :

Test.prototype.fail = function() { 
    setInterval(function() { 
     console.log('A', this.game); 
    }.bind(this), 300); 
} 
당신은 객체가 이미 인스턴스화되고 fail() 이미 호출되었는지 말을하는지

? setInterval, 내부의 원래 함수에 액세스하려는 경우을 사용할 수 없습니다. 해당 범위는 함수 외부에서 액세스 할 수 없습니다. 원래 setInterval 호출의 반환 값없이 clearInterval을 사용할 수 없습니다. 개별 인스턴스에서 함수를 재정의하려면 경우

, 당신은, 당신은 인스턴스에 액세스 할 수 있지만, fail()가 이미 호출 된 경우, 원래의 간격을 취소 할 수 없었다.

test.fail = function() { 
    setInterval(function() { 
     console.log('B', this.game); 
    }.bind(this), 1000); 
}; 

그러나 마지막 편집, 당신은 test 예를도 간격도 setInterval의 기능도에 액세스 할 수 말한다처럼 상황이 정말 있다면, 당신은 당신이 제안 무엇을 할 수 없습니다.

+0

원래 프로토 타입 정의를 변경할 수 없으므로 구조가 변경되었습니다! –

+0

@ShannonHochkins 그건 당신의 질문으로는 분명하지 않습니다. 그래서 당신은 첫 번째'Test.prototype.fail'을 수정할 수 없다는 것을 말하고 있습니다.하지만이 프로토 타입을 오버라이드하여 영향을 주길 원합니까? 보다 명확하게 질문을 업데이트하십시오. – Steve

+0

첫 번째 편집에서이 모든 것을 설명했습니다. 미안하지만 명확하지 않았습니다.이 편집 방법은 무엇입니까? –