나는() event.js 한번의 구현을 찾고 있어요 :
EventEmitter.prototype.once = function(type, listener) {
if ('function' !== typeof listener) {
throw new Error('.once only takes instances of Function');
}
var self = this;
function g() {
self.removeListener(type, g);
listener.apply(this, arguments);
};
g.listener = listener;
self.on(type, g);
return this;
};
가) (당신이
some_object.once('on', function(){ console.log(this); });
임시 함수 g을 할 것이라는 점을 기억 self.removeListener(type,g)
있다. g()의 컨텍스트가 틀리면 틀릴 것이기 때문입니다. 그러나, 선이 그 후, 변수 this
이 ... listener.apply(this, arguments);
에 사용되지만,하지이 다음 listener(arguments)?
아래로 약간에 글로벌 컨텍스트를 통과, 그것은 self.on
대신하는 경우 this.on
를 실행합니다.
지금 ... 혼란 스럽습니다. Javascript를 처음 접했을 때 문맥에 여전히 혼란 스럽습니다. 하지만,이 코드는 바나나를 몰고 있습니다. 누군가 제게 여기 계몽 해 주실 수 있습니까?
감사합니다.
머. this
는 주어진 함수 호출에서 원하는처럼, 당신은 self
에 저장된 사본을 참조하고 항상에 액세스 할 수 있습니다 설정되지 않습니다 때
: 여기
는 더 이상 논의와 관련 포스트 다른 것." ... 나는 이것에 대해 잘 모르겠다. events.js의 코드를 읽는 중,'EventEmitter.prototype.emit()'은'... listeners [i] .apply (this, args); '를가집니다. 그래서 호출자의'this'는 여전히 객체와 동일합니다 ...? 나는 그 기능에서 '그'의 요지를 전혀 보지 못했다. [events.js] (https://github.com/joyent/node/blob/master/lib/events.js) 라인 114 (전화)와 184 ('once()'참조) – Merc@Merc - 나는 '내가 따라하면 ... '과 같은 문단. 나는 코드 자체를 만들기 위해해야하기 때문에 "self"가 단지 컨벤션이나 최소화를위한 목적으로 진행되고 있다고 생각한다. – jfriend00
당신은 똑같은 말을했습니다 ...! 좋아, 그래서 나는 미치지 않을거야. 고맙습니다! (답변 가능) – Merc