Javascript-';功能';不是函数单例模式

Javascript-';功能';不是函数单例模式,javascript,function,singleton,Javascript,Function,Singleton,我一直在努力学习Javascript。这是我的代码-我试图实现一个单例-但由于某种原因,我得到错误setMessage不是行firstInstance.setMessage(“Message”)中的函数。我不知道我做错了什么-任何帮助都将不胜感激。 ` setMessage和getMessage需要位于您创建的实例上,而不是与createInstance一起返回的对象中: var mySingleton=(函数(){ 举个例子; 让信息; 函数createInstance(){ 如果(!ins

我一直在努力学习Javascript。这是我的代码-我试图实现一个单例-但由于某种原因,我得到错误setMessage不是行
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());`