2009-07-10 3 views

답변

15

할 같은 :

var myObject = function() { 
    var p = 'private var'; 
    function private_method1() { 
     public.public_method1() 
    } 

    var public = { 
     public_method1: function() { 
     alert('do stuff') 
     }, 
     public_method2: function() { 
     private_method1() 
     } 
    }; 
    return public; 
}(); 
//... 

myObject.public_method2() 
+0

하지만 감사 해요 나는, 나는 당신의 모델을 시도했지만 좀 sintax 오류가 – krul

+0

공공 그냥 JS 객체 인 공용 변수 내에서 하나 이상의 방법을 넣을 수있다; – BaroqueBobcat

+0

감사합니다,하지만 내 코드에서 하나처럼 다루기를 거부합니다. (디버깅해야합니다. 설명을 위해 Daniel에게 감사드립니다. – krul

0

직접 답을 알고하지 마십시오,하지만 다음해야 작업.

var myObject = function() 
{ 
    var p = 'private var'; 
    function private_method1() { 
    _public_method1() 
    } 
    var _public_method1 = function() { 
     // do stuff here 
    } 

    return { 
    public_method1: _public_method1 
    }; 
}(); 
3

public_method1은 공개 된 방법이 아닙니다. 이것은 생성자 함수의 return 문 내에서 완전히 구성되는 익명 객체의 메서드입니다.

var myObject = function() { 
    var p... 
    function private_method() { 
     another_object.public_method1() 
    } 
    var another_object = { 
     public_method1: function() { 
      .... 
     } 
    } 
    return another_object; 
}() ; 
14

가 왜 인스턴스화 할 수 무언가로이 작업을 수행하지 :

당신이 그것을 호출 할 경우, 왜이 같은 객체를 구성하지?

function Whatever() 
{ 
    var p = 'private var'; 
    var self = this; 

    function private_method1() 
    { 
    // I can read the public method 
    self.public_method1(); 
    } 

    this.public_method1 = function() 
    { 
    // And both test() I can read the private members 
    alert(p); 
    } 

    this.test = function() 
    { 
    private_method1(); 
    } 
} 

var myObject = new Whatever(); 
myObject.test(); 
+0

감사합니다. Peter, 불행히도 저는 주로 대부분 네임 스페이스로 사용하는 모델을 다시 작성하는 코드가 많습니다. – krul

+0

훌륭합니다! –

2

이 방법이 권장되지 않습니까? 나는, 당신의 빠른 답변을하지 않도록

var klass = function(){ 
    var privateMethod = function(){ 
    this.publicMethod1(); 
    }.bind(this); 

    this.publicMethod1 = function(){ 
    console.log("public method called through private method"); 
    } 

    this.publicMethod2 = function(){ 
    privateMethod(); 
    } 
} 

var klassObj = new klass(); 
klassObj.publicMethod2(); 
관련 문제