Невозможно создать экземпляр объекта в файле и использовать его в другом - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь реализовать шаблон синглтона, чтобы создать экземпляр объекта в файле и повторно использовать тот же экземпляр в другом файле. Очевидно, что я не понимаю чего-то элементарного. Какие-нибудь указания для лучшего понимания?

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 Ответ

0 голосов
/ 11 мая 2018

Проблема в том, что ваша _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 , которая сделает эту работу за вас =)

...