2013-11-25 190 views
1

我創建了一個單獨的類,但是我在訪問私有方法時遇到了一些麻煩。我的例子是這樣的:單身人士訪問私人方法訪問公共方法

var mySingleton = (function() { 

    function init() { 

    function privateMethod(){ 
     publicMethod(); 
     //this.publicMethod() also doesn't work 
    } 

    privateMethod(); 

    return { 

     publicMethod: function() { 
     console.log("The private method called me!"); 
     } 
    }; 
    }; 

    return { 
    getInstance: function() { 

     if (!instance) { 
     instance = init(); 
     } 

     return instance; 
    } 
    }; 
})(); 

var singleton = mySingleton.getInstance(); 

看來範圍是完全不同的。我應該以不同的方式創建一個單身人士嗎?

+0

在哪裏調用私有「方法」? – Bergi

+0

@Bergi對不起,剛添加它。在init()中調用; –

+1

@DevinDixon你能提供你想要如何使用它的樣本嗎? – Grundy

回答

1

那麼,爲什麼你不希望使用這樣的事:

var mySingleton = (function() { 
    /*private methods*/ 

    return { 
     /*public methods*/ 
    } 
})(); 

如果你的問題,你需要改變這樣的

... 
function init() { 

    function privateMethod(){ 
     publicMethod();//OK 
    } 

    privateMethod(); 

    function publicMethod(){ 
     console.log("The private method called me!"); 
    } 
    return { 

     publicMethod: publicMethod 

    }; 

}; 
... 
+0

那不是一個單身人士。我只想要一次實例 –

+0

'mySingleton'是一個變量 – Grundy

+1

您發佈的示例將被稱爲揭示模塊,與singleton不同。 –

1

代碼中不要使用額外的正式接洽init功能。而且您必須訪問instance上的公共方法,即您從init返回的對象。

var mySingleton = (function() { 
    var instance = null; 
    function privateMethod(){ 
    instance.publicMethod(); 
    } 

    return { 
    getInstance: function() { 
     if (!instance) { 
     instance = { 
      publicMethod: function() { 
      console.log("The private method called me!"); 
      } 
     }; 
     privateMethod(); 
     } 
     return instance; 
    } 
    }; 
})(); 

var singleton = mySingleton.getInstance();