2016-06-28 3 views
0
function Auth() { 
    console.log('Created!') 
} 
Auth.prototype.authenticate = function() { 
    // do stuff 
    this.emit('completed') 
} 
util.inherits(Auth, EventEmitter) 

다른 함수에서 어떻게 Auth.emit ('someEvent')를 호출 할 수 있습니까? 예를 들어 :Node.JS : 이벤트 Emmiter

function someOther() { 
    //do stuff 
    Auth.emit('event') 
} 

이 오류가 발생합니다 :

Auth.emit 함수 당신은 인스턴스를 생성 할 필요가

+1

먼저 '인증'의 인스턴스를 만들어야합니다. 또는 프로토 타입 함수를 사용하지 마십시오. – zerkms

+0

@zerkms, ok,하지만 모듈입니다 (모듈을 필요로 할 때 내가 빌려주는 새 인스턴스를 만듭니다), 그래서이 someOther 함수를 클래스로 옮길 수 있습니다. 하지만, 그 클래스의 새로운 인스턴스가 생성되기 전에 함수를 호출해야합니다. 내가 어떻게 할 수 있니? 심지어 가능할까요? – Src

+0

글쎄, 인스턴스없이 인스턴스 메서드를 호출 할 수는 없습니다. 당신은 무엇을 어떻게해야할지 다시 생각해야합니다. – zerkms

답변

1

없습니다.

var myAuthObj = new Auth(); 
myAuthObj.authenticate(...); 

프로토 타입의 메소드는 "인스턴스"메소드입니다. 객체의 인스턴스에서 직접 호출 할 수 있습니다.

"정적"메서드를 만들 수도 있지만 (실제로는 네임 스페이스 개체에 할당 된 일반 함수와 다른 방식으로) this 또는 상속 된 개체를 사용할 수 없습니다. new의 실제 객체와 생성자.

또한 util.inherits()을 프로토 타입 지정 앞에 이동해야합니다. util.inherits() 문은 프로토 타입을 대체하므로 나중에 수행하면 프로토 타입에 할당 한 내용을 지울 수 있습니다. 그리고 부모 객체의 생성자도 호출해야합니다.

function Auth() { 
    EventEmitter.call(this); 
    console.log('Created!') 
} 

util.inherits(Auth, EventEmitter); 

Auth.prototype.authenticate = function() { 
    // do stuff 
    this.emit('completed') 
} 

그래서, 세 가지 수정하기 :

  1. 이동 util.inherits() 당신이 Auth.prototype 아무것도를 할당하기 전에.
  2. 기본 객체를 올바르게 초기화하기 위해 생성자에 EventEmitter.call(this)을 추가하십시오.
  3. new Auth()을 사용하여 Auth 객체의 인스턴스를 만들고 해당 인스턴스에서 메소드를 호출하십시오.
+0

또한'Auth.prototype.authenticate'에 대한 할당 앞에'util.inherits' 호출을 넣어야합니다. – Bergi

+0

@Bergi - 잘 잡으세요. 그것도 Incorporated. – jfriend00

+0

그리고 우리가 그 동안 : [그것은 꼭 필요한 것은 아닙니다.] (http://stackoverflow.com/a/22791445/1048572) 물론 슈퍼 생성자를 호출하는 최상의 방법 :-) – Bergi

관련 문제