无法将 obj 实例化到文件中并在另一个文件中使用它

Unable to instantiate an obj into a file and use it in another

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

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>

这里的问题是您的 _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 =)