代码之家  ›  专栏  ›  技术社区  ›  MMM

无法将obj实例化为文件并在其他文件中使用

  •  1
  • MMM  · 技术社区  · 7 年前

    我试图实现singleton模式,以便在一个文件中实例化一个对象,并在另一个文件中重用同一个实例。很明显,我没有理解一些基本的东西。有什么更好的理解方向吗?

    let editorDiv = document.createElement('div');
    editorDiv.setAttribute('id','editor');
    document.body.appendChild(editorDiv);
    
    //a.js
    function singleton(){
      let _singleton;
      let quillOptions = { modules: { toolbar: true },
                      placeholder: 'Compose an epic...',
                      theme: 'snow'
                    }  
      if (!_singleton) {
        _singleton = new Quill('#editor', quillOptions) 
      }
      
      return _singleton;
    }
    
    //b.js
    //instantiate
    let quill = singleton();
    
    //c.js
    //get instance in order to use api
    let quillInstace = singleton(); 
    //Ex: quillInstance.getText(); 
    <link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
    <script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
    1 回复  |  直到 7 年前
        1
  •  1
  •   guillaumepotier    7 年前

    这里的问题是 _singleton 缓存变量的作用域在 singleton() 方法,这意味着每次调用它时,它都是空的。

    您应该以不同的方式存储它:

    //a.js
    //this is now a global var for this file
    let _singleton;
    
    function singleton(){
      let quillOptions = { modules: { toolbar: true },
                      placeholder: 'Compose an epic...',
                      theme: 'snow'
                    }  
      if (!_singleton) {
        _singleton = new Quill('#editor', quillOptions) 
      }
    
      return _singleton;
    }
    

    或者用那把 lodash memoize method 这就是你的工作=)