我放弃。我通常是c#开发人员,但该特定项目需要javascript。
我有一个列表,希望使用一些setter和getter(以及公共方法和私有帮助方法)进行保护。为此,我已按照Addy Osmani的Singleton模式实现了单例模式,如本文中所述:http://robdodson.me/javascript-design-patterns-singleton/
但是,当我尝试访问公共方法时,出现错误“ publicMethod不是函数”。
我有一个连接到“ addToList”的按钮,我只想打印出开始的消息。
为什么看不到我的方法?
angular
.module('bacnetui')
.controller('bacnetuiController', function($scope, devicesFactory,){
devicesFactory.getDevices().then(function (response){
$scope.devices = response.data;
}, function(error) {
console.log(error);
});
$scope.mySingleton = (function () {
// Instance stores a reference to the Singleton
var instance;
function init() {
// Singleton
var list = [];
// Private methods and variables
function indexOfDevice(dev){
...
}
function hasBacnet(dev,obj,prop){
....
}
function newBacnet(obj,prop){
....
}
return {
// Public methods and variables
publicMethod: function () {
console.log( "The public can see me!" );
},
publicProperty: "I am also public"
};
};
return {
// Get the Singleton instance if one exists
// or create one if it doesn't
getInstance: function () {
if ( !instance ) {
instance = init();
}
return instance;
}
};
})();
$scope.addToList = function(device,obj,prop) {
console.log("found a function: " + $scope.mySingleton.publicMethod());
//$scope.myList.addBacnet(device,obj,prop);
};
$scope.removeFromList = function(device,obj,prop) {};
$scope.saveToFile = function(){
};
});
答案 0 :(得分:0)
您需要按照评论中@Robby的说明使用$scope.mySingleton.getInstance().publicMethod()
。
以下是流程:
$scope.mySingleton = (function () {
...
function init() {
...
return {
publicMethod: function () {
...
},
};
};
return {
// Get the Singleton instance if one exists
// or create one if it doesn't
getInstance: function () {
if ( !instance ) {
instance = init();
}
return instance;
}
};
})();
以上结构返回mySingleton
,并为其分配了一个对象,如下所示:
{
getInstance: function() {...}
}
致电后,您就可以访问init()
返回的目标publicMethod()
。