Javascript-';功能';不是函数单例模式
我一直在努力学习Javascript。这是我的代码-我试图实现一个单例-但由于某种原因,我得到错误setMessage不是行Javascript-';功能';不是函数单例模式,javascript,function,singleton,Javascript,Function,Singleton,我一直在努力学习Javascript。这是我的代码-我试图实现一个单例-但由于某种原因,我得到错误setMessage不是行firstInstance.setMessage(“Message”)中的函数。我不知道我做错了什么-任何帮助都将不胜感激。 ` setMessage和getMessage需要位于您创建的实例上,而不是与createInstance一起返回的对象中: var mySingleton=(函数(){ 举个例子; 让信息; 函数createInstance(){ 如果(!ins
firstInstance.setMessage(“Message”)中的函数代码>。我不知道我做错了什么-任何帮助都将不胜感激。
`
setMessage
和getMessage
需要位于您创建的实例上,而不是与createInstance
一起返回的对象中:
var mySingleton=(函数(){
举个例子;
让信息;
函数createInstance(){
如果(!instance)instance={setMessage,getMessage};
返回实例;
}
函数setMessage(newMessage){
消息=新消息;
}
函数getMessage(){
返回消息;
}
返回{createInstance}
})();
var firstInstance=mySingleton.createInstance();
var secondInstance=mySingleton.createInstance();
setMessage(“消息”);
log(firstInstance.getMessage());
log(secondInstance.getMessage());
setMessage(“新”);
log(firstInstance.getMessage());
console.log(secondInstance.getMessage())
由于创建的对象没有任何属性,因此出现错误:instance=new object()代码>。当然,虽然您可以尝试将其他编程语言的概念应用于JavaScript,但这并不常见。您可以直接实例化一个对象。即使您想要封装消息
,如果您可以让mySingleton
成为singleton,为什么还需要调用mySingleton.createInstance()
?
var mySingleton = (function () {
var instance;
var message;
function getInstance() {
if (!instance) instance = new Object();
return instance;
}
function setM (newMessage) {
message = newMessage;
return;
}
function getM() {
return message;
}
return {
createInstance:getInstance,
setMessage:setM,
getMessage:getM
}
})();
var firstInstance = mySingleton.createInstance();
var secondInstance = mySingleton.createInstance();
//set messages
firstInstance.setMessage("Message");
console.log(firstInstance.getMessage());
console.log(secondInstance.getMessage());
//change messages
secondInstance.setMessage("New");
console.log(firstInstance.getMessage());
console.log(secondInstance.getMessage());`