2014-06-05 2 views
0

저는 멋진 IIFE를 작성하고 있으며이를 사용하는 사용자는 가능한 한 쉽게 만들고 싶습니다. 그래서 그들 중 일부 때문에 생각하는 것을 쉽게 이미 우리가 인라인 함수의 이름함수 표현식 이름이 eventListener 인 변수

document.addEventListener('click',function dood(){ 
    //some function 
},false); 
document.removeEventListener('click',dood,false); 
//instead of 
function dood(){ 
    //some function 
} 
document.addEventListener('click',dood,false); 
document.removeEventListener('click',dood,false); 

을 줄 수있는 기능없이 EventListener를 제거하지만 그들은 shouldn 이후 모르겠어요 우리가 할 수 있는지 궁금해했던 정확한 이름을 모르겠다.

var k = "name_of_function"; 
document.addEventListener('click',function window[k](){ 
    //the function 
},false); 

나는 이것이 작동하지 않는다는 것을 알고 있지만 이것을 할 수있는 방법이있다. 나는 그들이 그것을 쉽게 할 수 있도록 그것을 만들고 싶다.

object.cancel('name_of_function') //which will be the name of the instance 
// they created earlier if they gave that instance a name 
object={ 
    cancel:function(nm){ 
    document.removeEventListener(self.trigger,window[nm],false); 
    //self.trigger really is this.trigger which they assign as either scroll,click,mousemove,etc. 
    } 
}; 

어떤 아이디어라도? 아니면 전혀 가능하지 않습니까?

사용법은 다음과 같습니다

scrollex('element',{ 
    max:500, 
    min:500, 
    pin:200, 
    offset:0.5, 
    name:'google',//this then would be used in multiple instances 
}); 

scrollex.events //shows all events and their names 
scrollex.listen('google'); //it'll console log all info for this event 
scrollex.cancel('google'); 
+1

인라인 함수에 이름을 지정하면 [nfe] (http://kangax.github.com/nfe/)가 있지만 이름은 여전히 ​​전역 식별자가되지 않습니다. 기존 솔루션을 고수하십시오. – Bergi

+0

나는 오래된 솔루션이 없다. NFE이지만 API가 IIFE로 싸여있다. 내가 왜 내가 LOL을 찾고 있는지를 알 수 없다고 말했다. NFE가있는 removeEventListener를 의미하는 경우 내 사용자에게는 성가시다. 가능한 한 가장 쉬운 방법이 필요합니다.> – EasyBB

+0

사용자가 어쨌든 API를 사용하려면 어떻게해야합니까? 그들이 그걸로 무엇을해야합니까? 이미 가지고있는 IEFE를 보여줄 수 있습니다. – Bergi

답변

1

난 당신이 올바른 궤도에 있다고 생각. 그러나 window과 일부 로컬 객체를 사용하면 안됩니다. 함수 표현식 (또는 function window[k](){})이 동적으로 이름을 지정하는 경우 은 불가능합니다.a pain - 시도하지 마십시오. 그냥 익명으로 유지하고 속성 이름/변수를 통해서만 참조하십시오.

var object = (function() { 
    var listeners = { 
     name_of_function: function dood(){…} 
    }; 
    document.addEventListener('click', listeners.name_of_function, false); 

    return { 
     cancel: function(nm) { 
      document.removeEventListener('click', listeners[nm], false); 
     } 
    }; 
}()); 

// now, you can 
object.cancel('name_of_function') 
+0

수백 가지 맞춤 기능이 있다면 어떨까요? 사용자는 이러한 속성을 설정하며 이러한 속성은 청취자 내부에서 사용되어 매번 사용자 지정 기능을 제공합니다. – EasyBB

+0

글쎄, 당신은 쉽게 그 '청취자'객체에있는 서로 다른 속성 이름을 가진 백가지 다른 기능을 가질 수 있습니다. 하지만 당신이 필요로하는 것을 오해했을 수도 있습니다. – Bergi

관련 문제