JS 인수 바인딩이 작동하지 않습니다.

balaphp
function pubsub(){

  var events = {};

 var self = this;
     self.on   = registerEvent;
     self.emit = triggerEvent;

function registerEvent(eventName,eventCb){

    if(events[eventName] === undefined){
        events[eventName] = {
            'counter'    : 0,
            'subscribers': {},
            'length'     : 0
        }   
    }

    var counter = events[eventName].counter++;

    events[eventName].subscribers[counter] = eventCb;
    events[eventName].length = Object.keys(events[eventName].subscribers).length;

    var unsubscribeObj = unsubscribe.bind(eventName,counter);

    return {'unsubscribe':unsubscribeObj};

} 

function triggerEvent(eventName,param){

    if(events[eventName] !== undefined && events[eventName].length){
        var eventList = Object.keys(events[eventName].subscribers);
        for(var index in eventList){
            var eventKey = eventList[index];
            events[eventName].subscribers[eventKey].apply({},param);
        }           
    }

 } 

  function unsubscribe(eventName,counter){

     if(events[eventName].subscribers[counter] !== undefined){
        delete events[eventName].subscribers[counter];
         events[eventName].length =    Object.keys(events[eventName].subscribers).length;
     }else{
        console.warn("Event not subscribed");
     }
  }
 }

pubsub 프로그램을 작성하려고합니다. 구독 취소 기능을 제외하고는 모든 것이 잘 작동합니다.

    var unsubscribeObj = unsubscribe.bind(eventName,counter);
    return {'unsubscribe':unsubscribeObj};

구독 취소에 나는 인수가 바인드를 던졌지 만 외부에서 호출 할 때 작동하지 않습니다.

var pObj = new pubsub(); // Works Fine
var e1 =  pObj.on('event1',function(data){ alert(data); }); 
pObj.emit('event1',["hi"]);
e1.unsubscribe()

포착되지 않은 TypeError : 정의되지 않은 '구독자'속성을 읽을 수 없습니다.

TJ 크라우 더

의 첫 번째 인수 는 원래 함수를 호출 할 때 bind사용할 값입니다 this. 호출 할 인수는 그 뒤에 있습니다. 그래서 라인

var unsubscribeObj = unsubscribe.bind(eventName,counter);

로 불려가는 함수 생성 this을 참조 eventName하고 counter그 같은 첫번째 인수를. 그러나 당신 은 첫 번째 주장과 두 번째 주장 으로 unsubscribe기대 eventName합니다 .counter

둘 다 원하는 경우 eventNamecounter로 인수를 인수 로 다른 첫 번째 인수를 전달합니다 bind. 당신이 무슨 상관하지 않는 경우 thisunsubscribe, null당신이 선택할 것을 보통 :

var unsubscribeObj = unsubscribe.bind(null, eventName, counter);

추가 정보 bind: 사양 | MDN

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Angular js 바인딩이 작동하지 않습니다.

분류에서Dev

Angular.JS 바인딩이 작동하지 않습니다.

분류에서Dev

Ember.js :보기 바인딩이 작동하지 않음

분류에서Dev

녹아웃 js 클릭 바인딩이 작동하지 않음

분류에서Dev

녹아웃 js 클릭 바인딩이 작동하지 않음

분류에서Dev

구성 요소의 Angular JS 데이터 바인딩이 작동하지 않습니다.

분류에서Dev

레이블 바인딩이 작동하지 않습니다.

분류에서Dev

이상한 바인딩이 작동하지 않습니다.

분류에서Dev

Angularjs : 데이터 바인딩이 작동하지 않습니다.

분류에서Dev

knockout.js 데이터 바인딩에 대한 AJAX 포스트가 작동하지 않습니다.

분류에서Dev

Vue.js를 사용한 MVVM 바인딩이 예상대로 작동하지 않습니다.

분류에서Dev

knockout.js 체크 바인딩이 부트 스트랩 data-toggle = "toggle"에서 작동하지 않습니다.

분류에서Dev

Xamarin 바인딩이 listview에서 작동하지 않습니다.

분류에서Dev

Tkinter : 기능 키 바인딩이 작동하지 않습니다.

분류에서Dev

ListView 항목 바인딩이 작동하지 않습니다.

분류에서Dev

jquery 바인딩이 작동하지 않습니다.

분류에서Dev

tkinter에서 키 바인딩이 작동하지 않습니다.

분류에서Dev

바인딩이 작동하지 않습니다

분류에서Dev

DiscreteStringKeyFrame 바인딩이 작동하지 않습니다.

분류에서Dev

WPF 바인딩이 작동하지 않습니다.

분류에서Dev

setInterval 후 바인딩이 작동하지 않습니다.

분류에서Dev

xmodmap 키 바인딩이 작동하지 않습니다.

분류에서Dev

바인딩 DNS 영역이 작동하지 않습니다.

분류에서Dev

바인딩 각도 입력이 작동하지 않습니다.

분류에서Dev

메뉴 키 바인딩이 작동하지 않습니다.

분류에서Dev

보간 바인딩이 작동하지 않습니다.

분류에서Dev

DataGrid DataGridComboBoxColumn ItemsSource 바인딩이 작동하지 않습니다.

분류에서Dev

ResourceDictionary의 바인딩이 작동하지 않습니다.

분류에서Dev

사전-TextBox 바인딩이 작동하지 않습니다.

Related 관련 기사

  1. 1

    Angular js 바인딩이 작동하지 않습니다.

  2. 2

    Angular.JS 바인딩이 작동하지 않습니다.

  3. 3

    Ember.js :보기 바인딩이 작동하지 않음

  4. 4

    녹아웃 js 클릭 바인딩이 작동하지 않음

  5. 5

    녹아웃 js 클릭 바인딩이 작동하지 않음

  6. 6

    구성 요소의 Angular JS 데이터 바인딩이 작동하지 않습니다.

  7. 7

    레이블 바인딩이 작동하지 않습니다.

  8. 8

    이상한 바인딩이 작동하지 않습니다.

  9. 9

    Angularjs : 데이터 바인딩이 작동하지 않습니다.

  10. 10

    knockout.js 데이터 바인딩에 대한 AJAX 포스트가 작동하지 않습니다.

  11. 11

    Vue.js를 사용한 MVVM 바인딩이 예상대로 작동하지 않습니다.

  12. 12

    knockout.js 체크 바인딩이 부트 스트랩 data-toggle = "toggle"에서 작동하지 않습니다.

  13. 13

    Xamarin 바인딩이 listview에서 작동하지 않습니다.

  14. 14

    Tkinter : 기능 키 바인딩이 작동하지 않습니다.

  15. 15

    ListView 항목 바인딩이 작동하지 않습니다.

  16. 16

    jquery 바인딩이 작동하지 않습니다.

  17. 17

    tkinter에서 키 바인딩이 작동하지 않습니다.

  18. 18

    바인딩이 작동하지 않습니다

  19. 19

    DiscreteStringKeyFrame 바인딩이 작동하지 않습니다.

  20. 20

    WPF 바인딩이 작동하지 않습니다.

  21. 21

    setInterval 후 바인딩이 작동하지 않습니다.

  22. 22

    xmodmap 키 바인딩이 작동하지 않습니다.

  23. 23

    바인딩 DNS 영역이 작동하지 않습니다.

  24. 24

    바인딩 각도 입력이 작동하지 않습니다.

  25. 25

    메뉴 키 바인딩이 작동하지 않습니다.

  26. 26

    보간 바인딩이 작동하지 않습니다.

  27. 27

    DataGrid DataGridComboBoxColumn ItemsSource 바인딩이 작동하지 않습니다.

  28. 28

    ResourceDictionary의 바인딩이 작동하지 않습니다.

  29. 29

    사전-TextBox 바인딩이 작동하지 않습니다.

뜨겁다태그

보관