일반적인 용어는 프록시입니다.
새 개체를 만듭니다. 당신이 드러내고 자하는 방법만을 제공하십시오. private closure에서는 실제 eventEmitter 객체가 있고 노출하려는 몇 가지 메소드는 실제 eventEmitter 객체에서만 작동 할 수 있지만 프록시에만 액세스 할 수있는 아무도 실제 eventEmitter 객체를 수정할 수 없으며 이미 터의 모든 메소드를 사용할 수 있습니다. 당신은 명시 적으로 프록시에 노출되지 않았습니다. 다음은 프록시를 통해 .on()
메소드를 사용할 수있는 간단한 예제입니다 (에미 터의 다른 메소드는 호출 할 수 없습니다).
class EmitterProxy {
constructor(emitter) {
// add method that has access to emitter
this.on = function(event, fn) {
let self = this;
return emitter.on(event, function() {
// this makes sure that the value of this is the EmitterProxy
// instance and not the emitter instance
fn.apply(self, arguments);
});
}
// define any other methods you want to proxy
}
}
그런 다음 코드에서 프록시를 생성하고 실제 eventEmitter를 전달합니다. 그런 다음 프록시 객체를 원하는 모든 사람과 공유 할 수 있습니다. 그들은 그것에 대한 사건을들을 수는 있지만 에미 터 자체에 대해서는 아무 것도 할 수 없습니다.
let proxy = new EmitterProxy(actualEmitter);
그런 다음 하나의 메소드에만 액세스 할 수있는 다른 코드로 프록시를 전달하십시오.
// other code can do this
proxy.on('finish',() => { /* do something here */ });