2013-09-25 1 views
0

개체/함수/클로저가 있습니다. (나는 이것이 모두 3 가지라고 생각합니까?) 페이지의 여러 요소에 개별 인스턴스를 적용해야합니다.클로저 함수의 복사본 (새 인스턴스)을 만드는 방법은 무엇입니까?

var NS = NS || {}; 
NS.PLAJAX = function(){ 

    var pub = {}; 
    var self = this; 


    pub.Init = function(FormRef){  
    // do stuff 
    }; 

    self.aPrivateFunction = function(){  
     // do stuff 
    } 

    return pub; 
}(); 


// Apply a *copy* to each element with the given class 
$(function(){ 
    $('.el-form-wrapper').each(function(index, Element){ 
     // Attempt #1 
     NS.PLAJAX.Init(Element); // Doesn't make copies! 

     //OR, Attempt #2  
     var Newbie = new NS.PLAJAX(); // Throws a "not a constructor" error 
     Newbie.Init(Element); 
    }); 
}); 

각 요소에 대해이 클로저/개체의 새 인스턴스를 얻으려면 어떻게해야합니까?

답변

2

당신이 가진 것은 단지 대상 일뿐입니다. 그러나 new 키워드를 사용하려면 함수 (생성자)가 필요합니다.

생성자에서 아무 것도 반환 할 필요가 없습니다. new 키워드는 새 개체를 만들고 해당 새 개체가 포함 된 함수를 this으로 호출 한 다음 반환합니다. 공용 메서드는 this (self)의 속성에 할당해야하며 개인 메서드는 로컬 변수 여야합니다. 당신이 될 겁니다 것은이 같은 것입니다 :이 시도

var NS = NS || {}; 
NS.PLAJAX = function(){ 
    var self = this; 


    self.Init = function(FormRef){  
    // do stuff 
    }; 

    var aPrivateFunction = function(){  
     // do stuff 
    } 
}; 


// Apply a *copy* to each element with the given class 
$(function(){ 
    $('.el-form-wrapper').each(function(index, Element){ 
     var Newbie = new NS.PLAJAX(); 
     Newbie.Init(Element); 
    }); 
}); 
+0

참조하지만 당신은 그것을 할 경우 PLAJAX는 더 이상 폐쇄가 아닙니다. – Nick

+0

@Nick : PLAJAX의 각 인스턴스 내에서 함수'aPrivateFunction'를 둘러싸는 클로저가 여전히 생성됩니다. 왜 그것이 폐쇄가 아니라고 생각합니까? 종결은 무엇이라고 생각하니? – slebetman

+0

나는'function DoSomething() {}(); '과 같은 자체 실행 함수와 클로저를 혼동하고 있다고 생각한다. – Nick

0

나를 유

var NS = NS || {}; 

NS.PLAJAX = function(){ 

    var pub = {}; 
    var self = this; 


    pub.Init = function(FormRef){  
    alert(FormRef); 
    }; 

    self.aPrivateFunction = function(){  
     alert("private"); 
    } 

    return pub; 
}; 

//이 개체에 액세스하기위한이

NS 작동합니다 희망을 위해 작동
$(function(){ 
    $('.el-form-wrapper').each(function(index, Element){ 
     var a=NS.PLAJAX(); 
     console.log(typeof(a)); 
     a.Init("gg"); // Doesn't make copies! 

      //OR, Attempt #2  
      var Newbie = new NS.PLAJAX(); // Throws a "not a constructor" error 
      Newbie.Init("ff"); 
}); 
     }); 

demo

관련 문제