我创建了一个单独的类,但是从私有方法访问公共方法时遇到了一些麻烦。我的例子是:
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 :(得分: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
};
};
...
答案 1 :(得分: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();