首页 > 解决方案 > Javascript - “函数”不是函数单例模式

问题描述

我一直在努力学习 Javascript。这是我的代码 - 我正在尝试实现单例 - 但由于某种原因,我得到错误 setMessage is not a function in the line firstInstance.setMessage("Message");。我不知道我做错了什么 - 任何帮助将不胜感激。`

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());`

标签: javascriptfunctionsingleton

解决方案


和需要在您创建的对象中,而不是在返回的对象setMessage中:getMessageinstancecreateInstance

var mySingleton = (function() {
  let instance;
  let message;

  function createInstance() {
    if (!instance) instance = { setMessage, getMessage };
    return instance;
  }
  function setMessage(newMessage) {
    message = newMessage;
  }
  function getMessage() {
    return message;
  }

  return { createInstance }
})();

var firstInstance = mySingleton.createInstance();
var secondInstance = mySingleton.createInstance();

firstInstance.setMessage("Message");

console.log(firstInstance.getMessage());
console.log(secondInstance.getMessage());

secondInstance.setMessage("New");

console.log(firstInstance.getMessage());
console.log(secondInstance.getMessage())


推荐阅读