자바 스크립트에서 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를 설정하면 잘 작동하고 나중에 내 다른 내부 방송을 호출 할 수 있습니다 사물. 어쩌면 이것은 순수한 정답이 아니지만 더 나은 것을 찾지 않는 한 ...
this.broadcast가 아닌 this.broadcast ... – dandavis
을 정의 했으므로 중재자에 등록한 객체에서 브로드 캐스트를 호출합니다. 모든 객체에는 "m"필드가 있는데, 이는 중재자를 가리키고 있습니다. 미안하지만 내 설명이 불분명하다면. –
http://ideone.com/u6VMez - 문제의 원인을 설명해주세요. – Kos