2013-07-26 3 views
2

필자는 본질적으로 플러그인 용 플러그인을 작성할 수있는 확장 기능을 가진 jQuery 플러그인을 작성합니다. 당신이 바이올린 예를 살펴 경우JavaScript로 비공개 메소드를 동적으로 작성하십시오.

http://jsfiddle.net/eeBEJ/1/

당신은 당신이 프로토 타입을 확장하는 기능에 통과 할 수있는 $.fn.wPluginTest.extend 기능을 볼 수 있습니다. 로컬 메서드를 확장하여 private 메서드를 추가 할 여지가 있습니까?

예를 들어 앞에 _으로 전달 된 함수는 private로 설정되며 PluginTest 객체를 통해 공개적으로 사용할 수 없습니다.

답변

2

javascript 개체에는 개인 속성이 없으며 단지 밑줄을 붙이면됩니다. 그들은 정적 프로토 타입 객체에 묶여있어 - -

$.fn.wPluginTest.extend = function(funcs) { 
    var proto = PluginTest.proto, 
     priv = Object.create(proto); // a private namespace inheriting from proto 
    for (func in funcs) { 
     if (func.charAt(0) != '_') 
      PluginTest.prototype[func] = funcs[func].bind(priv); 
     else 
      priv[func.slice(1)] = funcs[func]; 
//     ^^^^^^^^^ not sure, might be confusing 
    } 
} 

아직 그 기능들이 호출하고있는 PluginTest 인스턴스에 액세스 할 수 없습니다 그래서 아마 나쁜 :

그러나

, 당신은 시도 할 수 생각.

실제 개인 정보가 필요한 플러그인이있는 경우 변수 자체를 사용해야합니다.

+0

음, 다른면에서이 문제에 접근하고'_'로 시작하는 함수가'null '또는 무엇인가를 반환하는 것이 좋습니다. 플러그인에 대한 모든 호출은 어쨌든 getter/setter 영역을 통해 퍼널됩니다. 감사. – Rob

+0

나는 당신이 문제에 대해 전혀 걱정하지 않아야한다고 생각한다. 플러그인 플러그인 중 하나가 비공개 기능을 필요로하는 경우 플러그인 자체를 범위 지정해야합니다. 그렇지 않으면 공용 메서드 만 복사하는 것입니다. – Bergi

관련 문제