2013-05-03 2 views
2

자바 스크립트에서 this 키워드로 열심히 노력하고 있습니다. 많은 기사와 답변을 읽었지만이 모든 지식을 간단한 코드에 적용하는 방법을 이해하지 못합니다. 등록 된 객체에 내가 멋진 Uncaught TypeError: cannot call method broadcast on undefined 가지고내부 프로토 타입 함수에 대한 참조

this.m.broadcast("Connected"); 

을하려고에

function Mediator() { 
     this.registered = {} 
    } 

    Mediator.prototype = { 
     constructor: Mediator, 

    register: function (id, e) { 
     this.registered[id] = e; 
     e.m = this; //<-- here 
    }, 

    broadcast: function() {...} 
} 

하지만 때

여기 내 "중재자"개체입니다.

편집 :

내가 e 내부 나중에 방송 방법을 사용할 수 있도록 중재자에 대한 참조를 유지하기 위해 e 객체를 원한다. 내 문제는 e 레지스터 메서드 내에서 설정 참조를 유지하지 것입니다.

Edit2가 :

대신 프로토 타입을 사용하는 익명의 객체를 반환하는 작업 않는 것으로 보인다

:

function Mediator() { 
    var registered = {} 

    return { 
     register: function (id, e) { 
         this.registered[id] = e; 
         e.m = this; //<-- here 
        }, 

     broadcast: function() {...} 
    } 
} 

이 방법이에 m를 설정하면 잘 작동하고 나중에 내 다른 내부 방송을 호출 할 수 있습니다 사물. 어쩌면 이것은 순수한 정답이 아니지만 더 나은 것을 찾지 않는 한 ...

+0

this.broadcast가 아닌 this.broadcast ... – dandavis

+0

을 정의 했으므로 중재자에 등록한 객체에서 브로드 캐스트를 호출합니다. 모든 객체에는 "m"필드가 있는데, 이는 중재자를 가리키고 있습니다. 미안하지만 내 설명이 불분명하다면. –

+0

http://ideone.com/u6VMez - 문제의 원인을 설명해주세요. – Kos

답변

0

시도해보십시오. 무엇을하고 싶은지 확실하지 않습니다. this.e= m; 또는 this.m = e;. 메서드는 다음과 같이 호출됩니다. broadcast("Connected)이 값을 지정할 필요가 없습니다. 또는 m. 네가 그것을 부를 때. 희망이 조금 도움이됩니다.