Как jquery отображается на функцию init в этом коде - PullRequest
1 голос
/ 06 мая 2020

Привет всем, я пытаюсь понять приведенный ниже код. Я понимаю, что это самозапускающаяся функция. И, в конце концов, когда документ готов, вызывается метод methodDraw.init

(function() {

    if(!window.methodDraw) window.methodDraw = function($) {
      var svgCanvas;
      var Editor = {};
      var is_ready = false;
      var curConfig = {
        canvas_expansion: 1, 
        dimensions: [580,400], 
        initFill: {color: 'fff', opacity: 1},
        initStroke: {width: 1.5, color: '000', opacity: 1},
        initOpacity: 1,
        imgPath: 'images/',
        extPath: 'extensions/',
        jGraduatePath: 'lib/jgraduate/images/',
        extensions: [],
        initTool: 'select',
        wireframe: false,
        colorPickerCSS: false,
        gridSnapping: false,
        gridColor: "#000",
        baseUnit: 'px',
        snappingStep: 10,
        showRulers: (svgedit.browser.isTouch()) ? false : true,
        show_outside_canvas: false,
        no_save_warning: true,
        initFont: 'Helvetica, Arial, sans-serif'
      };
      var curPrefs = {}; //$.extend({}, defaultPrefs);
      var customHandlers = {};
      Editor.curConfig = curConfig;
      Editor.tool_scale = 1;

      Editor.setConfig = function(opts) {
        $.extend(true, curConfig, opts);
        if(opts.extensions) {
          curConfig.extensions = opts.extensions;
        }
      }      

      Editor.init = function() {

        // For external openers
        (function() {
          console.log("inside editor.init")
          // let the opener know SVG Edit is ready
          var w = window.opener;
          if (w) {
                try {
              var methodDrawReadyEvent = w.document.createEvent("Event");
              methodDrawReadyEvent.initEvent("methodDrawReady", true, true);
              w.document.documentElement.dispatchEvent(methodDrawReadyEvent);
                }
            catch(e) {}
          }
        })();        
      };  
      return Editor;
    }(jQuery);    

    // Run init once DOM is loaded
    $(methodDraw.init);
    console.log("inside methoddraw.init")

  })();

Я не понимаю, как methodDraw приравнивается к Editor? как methodDraw.init вызывает Editor.init ?. В консоли за сообщением methodDraw следует сообщение редактора. Или я ошибаюсь. Пожалуйста, подождите, я только начинаю с jQuery.

1 Ответ

0 голосов
/ 06 мая 2020

В этом фрагменте кода, если вы внимательно посмотрите на window.methodDraw, это функция, и в конце она вернет экземпляр объекта Editor, который был настроен и подготовлен в теле функции window.methodDraw, поэтому, поскольку этот объект-экземпляр уже есть метод инициализации, вы можете напрямую связать вызов с ним, вот небольшой фрагмент, чтобы продемонстрировать это простым способом:

let Editor = {};

Editor.init = () => {
 console.log('Editor.init');
}

let InitializerObj = (() => {
  return Editor;
})()

InitializerObj.init();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...