2012-09-01 3 views
0

자바 스크립트에서 아키텍처와 같은 클래스를 만들려고하지만 포인트를 고수하려고합니다. 여기 코드입니다 :생성자에 범위 변수 추가하기

var make = function(args) { 
    var priv = args.priv, 
     cons = args.cons, 
     pub = args.pub; 
    return function(consParams) { 

     var priv = priv, 
      cons = args.cons; 

     cons.prototype.constructor = cons; 
     cons.prototype = $.extend({}, pub); 

     if (!$.isFunction(cons)) { 

      throw new Hata(100001); 

     } 
     return new cons(consParams); 
    } 
}; 

내가 반환 된 함수 객체의 범위에 priv에 변수를 추가하고 cons.prototype의 범위를 반대하기 위해 노력하고있어하지만 난 그것을 만들 수 없습니다;

var myClass = make({ 
    cons: function() { 
     alert(this.acik); 
     alert(priv.gizli); 
    }, 
    pub: { 
     acik: 'acik' 
    }, 
    priv: { 
     gizli: 'gizli' 
    } 
}) 
myObj = myClass(); 

PS : 여기

는 메이크업 개체의 사용 단지 내가하고 싶은 것을 입증하기 위해 잘 나는 외부 바르를 사용했다. 자바 스크립트 함수 구조의 개인 변수 구문을 알고 있습니다. 하지만 "새로운"(패턴 이름을 잊어 버렸습니다) 인스턴스화 패턴에서 사용할 함수의 범위를 변경 (개인 변수 추가) 할 수있는 솔루션이 필요합니다.

PS : 용서해주세요 내 영어 ...

+0

영어로는 아무런 문제가 없습니다. –

+0

글쎄 내 용서를 용서 (?) 내 미래의 실수에 대한 받아들입니다 :) – Lupus

답변

0

은 당신이 정말로의 패턴을 따라야합니다 : 당신이 private 변수를 확인하고 싶은 경우에 당신은 자바 스크립트 전문가 더글라스 크록 포드에서이 링크를 체크 아웃 할 수 있습니다 : 적으로 내부 클로저의 var 이름을 외부 클로저가 포함 된 것과 동일한 이름으로 설정하면 더 이상 같은 이름의 원래 외부 클로저에 액세스 할 수 없습니다.

한편, 바깥 쪽 클로저 바스에 액세스해야하는 경우 동일한 이름의 바깥 쪽 클로저 바스를 설정할 필요가 없습니다. 그들이 내부 폐쇄와 함께있는 것처럼 단지 vars와 함께 일하십시오. 당신이 아래에있어 같은 다른 모든 함수 객체와 같은 추가 : // 당신이 이름 죄수와 함수 객체에 VAR 또는 개인 변수를 추가해야하는 경우

var make = function(args) { 
    var priv = args.priv, 
     cons = args.cons, 
     pub = args.pub; 
    return function(consParams) { 

     var someThing = priv, 
      sElse  = args.cons; 
    } 
}; 

.

var myClass = make({ 
    cons: function() { 
     var myPrivateVariable = 'private'; 
     alert(this.acik); 
     alert(priv.gizli); 
    }, 
    pub: { 
     acik: 'acik' 
    }, 
    priv: { 
     gizli: 'gizli' 
    } 
}) 
myObj = myClass(); 
+0

글쎄, 내가하고 싶은 것을 보여주기 위해 바깥 바를 사용했다. 자바 스크립트 함수 구조의 개인 변수 구문을 알고 있습니다. 하지만 "새로운"(패턴 이름을 잊어 버렸습니다) 인스턴스화 패턴에서 사용할 함수의 범위를 변경 (개인 변수 추가) 할 수있는 솔루션이 필요합니다. – Lupus

+1

나는 언어를 배우는 것이 얼마나 어려운지 자바 스크립트를 배울 때 올바른 방식으로 질문하는 것이 어려울 수 있음을 안다. 그 말로는, 나는 당신이 정확하게 질문을하는 데 어려움을 겪고 있다고 생각합니다. 이것이 올바른 대답을 얻을 수없는 이유입니다. 가장 가까운 것은 내가 궁금한 점이 있습니다. JavaScript의 객체에 private 속성 vars를 추가 할 수없고 public 속성 만 추가 할 수 있습니다. 1.) myObject.newProperty = '와우'또는 myObject [ 'newProperty'] = '와우'; –

+0

대단히 고맙습니다. :) – Lupus

0

하여 다음과 같이 자바 스크립트의 일반적인 방법은 구조와 같은 클래스 복제하려고하는 경우 : 함수 내에서 당신이 추가하는 것이

//Constructor 
function MyClass(myParam){ 
    this.myParam = myParam 
} 

MyClass.prototype.myMethod = function(){ 
    alert(this.myParam); //retreives the "class" instance variable myParam 
} 

//Instantiation 
var firstMyClass = new MyClass(7); 
firstMyClass.myMethod(); //alerts 7 

주 이 프로토 타입은 MyClass 인스턴스에 대한 참조가 될 것입니다.

function MyClass(arg){}; 

중요 참고 : 클래스 구조 후 경우 http://javascript.crockford.com/private.html

+0

난 그냥 죄수 함수 개체 범위에 priv 변수를 추가해야합니다. – Lupus