Какого шаблона проектирования придерживается этот код? - PullRequest
0 голосов
/ 18 декабря 2018

После изучения библиотеки JavaScript , которая меня заинтересовала, я наткнулся на этот странный IIFE.Я не могу найти никакой информации об этом шаблоне, и я полагаю, что он специально создан для этого варианта использования.Я не могу обернуть голову вокруг того, что здесь происходит, но интуиция заставляет меня думать, что это может быть похоже на паттерн Синглтона.Вот сокращенный пример, демонстрирующий то, что я считаю ядром кода:

var Ctor = (function () {

  function dostuff(_this, args...){}//only used within this iife

  var Ctor = function (args...) {
    if (!this || this === window) {
      return new Ctor(args...);
    }
    dostuff(this, args...);
    return this;
  };
  return Ctor;
})();

Обратите внимание, я изменил имена функций, чтобы отразить то, за что, как я считаю, они ответственны, но мои предположенияможет быть неправильно, и я мог бы сделать код еще более непонятным.Источник, на который я ссылаюсь, имеет длину около 60 строк, поэтому я бы посоветовал взглянуть на подсказки, если эта версия не имеет смысла.(Внесенные мной изменения: Ctor <=> Bind, Dostuff <=> Extended)

Что касается моих вопросов:

  1. Что такое шаблон проектирования?(если применимо)
  2. Что вдохновляет на использование такого шаблона?
  3. Какие существуют другие приложения для этого шаблона в реальном мире?
  4. Существует ли более стандартный /читаемый способ написания этого, который производит ту же функциональность?

1 Ответ

0 голосов
/ 18 декабря 2018

Потратив некоторое время на выяснение точной природы кода, я обнаружил его практическое использование.Отсюда гуглить вопрос стало намного проще, и я сразу нашел This Post .Вот ответы, которые я придумал на мои вопросы.Не стесняйтесь исправить это или добавить к обсуждению!

  1. Это шаблон создания, который абстрагируется от необходимости использовать «новый» при создании новых объектов
  2. Вы нене нужно беспокоиться о наборе нового, что делает синтаксис более простым (но, возможно, более запутанным)
  3. JQuery на самом деле использует шаблон, очень похожий на этот!кто бы мог подумать!каждый раз, когда вы используете $ (...), этот шаблон применяется
  4. это наиболее рекомендуемый (?) способ выполнения этой функции, но This Post предполагает, что следующий код эквивалентен (и гораздо проще для понимания):

    var Ctor = function(args){
      var obj = function(args){
        this.foo = bar
      };
      return new obj();
    };
    

    относительно того, почему вы бы использовали менее понятную версию, я не совсем уверен.Единственное большое различие, которое я вижу, состоит в том, что в первой версии вы создаете объект Ctor, а во второй версии вы создаете объект obj.В первой версии определения функции на одно меньше, и, может быть, есть и другие преимущества, которых я пока не вижу.Знание этих двух шаблонов эквивалентно, однако, дает мне гораздо лучшее понимание того, как работает первый шаблон.

...