Шаблоны создания экземпляров можно найти в Javascript. Каждый шаблон вытекает из базового шаблона, а затем настраивается по мере необходимости. Даже если вы выберете тот же экземпляр, что и другой разработчик, он может применяться совершенно по-другому.
Хотя шаблоны создания экземпляров индивидуально настраиваются, они преследуют одну и ту же цель: создать функцию с определенными свойствами и методами, которые можно вызывать при необходимости.
Узоры
- Функциональная реализация (FI)
- Функциональная общая реализация (F.S.)
- Создание прототипа (P.T.)
- Псевдоклассическая реализация (P.S.C.)
- Создание экземпляра Es6 (E.6.)
Функциональная реализация (FI)
Это самый начальный уровень шаблонов создания экземпляров. Когда вы впервые начнете программировать, вы будете использовать этот формат чаще всего!
Функциональное создание предлагает простой в реализации и простой для понимания шаблон. Этот шаблон также позволяет методам и свойствам оставаться локальными в своей области. Хотя у F.I. есть некоторые недостатки.
В частности, одной из серьезных проблем с этим шаблоном является дублирование. Это связано с необходимостью создавать отдельные объекты (даже с одинаковыми именами) со своими свойствами. Помните, как указано выше, F.I. сохраняет все локально. Это не позволяет другим объектам вызывать этот конкретный метод.
Несмотря на то, что дублирование представляет собой проблему с Functional Instantiation, этот шаблон по-прежнему очень хорош для начинающих: он позволяет начинающему программисту по-настоящему отточить навыки создания объектов с их собственными свойствами и методами.
Давайте посмотрим ниже на формат этого шаблона.
const name = function(firstName, lastName){
let obj = {};
obj.firstName = firstName;
obj.lastName = lastName;
obj.speak = function(){
//insert code
}
obj.takeIn = function(){
//insert code here
}
return obj;
}
//function calls
const jon = name('jon','doe');
jon.speak();
Функциональная общая реализация (F.S.)
Functional Shared Instantiation был создан для борьбы с дублированием свойств и методов в F.I.
Как и F.I., мы начинаем с построения функции и определяем определенные свойства внутри этой функции. Однако для хранения наших методов/свойств нам нужно создать отдельный объект целиком. Вы можете думать об этом втором объекте как о контейнере для методов, относящихся к первому. Каждый объект, созданный с использованием этого шаблона, будет иметь ссылку на одни и те же методы, не вызывая дублирования! Это приводит к лучшей эффективности памяти!
Однако, как и у его предшественника, у этого шаблона также есть недостатки. После создания экземпляра объекта устанавливается связь со свойствами и методами; таким образом, если вы измените методы и создадите новые объекты, эти два объекта будут относиться к разным вещам.
Давайте взглянем!
const name = function(firstName, lastName){
let obj = {};
obj.firstName = firstName;
obj.lastName = lastName;
_.extend(obj, objMethods)
return obj;
}
const objMethods = {
speak(){
//insert code here
},
takeIn(){
//insert code here
}
}
//function calls
const jon = name('jon','doe');
jon.speak();
Шаблон создания прототипа (P.T.)
Прототипное создание использует цепочку прототипов для создания объектов. Затем методы и свойства присоединяются к прототипу объекта с помощью:
Object.create(); //this creates a new object
Начните с создания функции. Внутри этой новой функции необходимо создать новый объект для ваших методов, используя метод, показанный выше. Этот новый объект будет вашим контейнером для всех методов.
P.T. не создает дубликатов в памяти, и каждый метод доступен для всех остальных объектов. Хотя этот шаблон немного сложнее для достижения.
const name = function(firstName, lastName){
let obj = Object.create(objMethods);
obj.firstName = firstName;
obj.lastName = lastName;
_.extend(obj, objMethods)
return obj;
}
const objMethods = {
speak(){
//insert code here
},
takeIn(){
//insert code here
}
}
//function calls
const jon = name('jon','doe');
jon.speak();
Псевдоклассический шаблон инстанцирования (P.S.C.)
Шаблон псевдоклассического создания экземпляров предназначен для исправления сложности, необходимой для создания объектов, как показано в шаблоне прототипного создания экземпляров.
Лучшая часть псевдоклассического создания экземпляров сводится к двум идеям: конструктору new и ключевому слову this. С помощью конструктора new мы можем реализовать ту же теорию, которую разработали в P.T. шаблон. Поскольку используется new, он обеспечивает создание объекта и его возврат в одной строке! Это экономит место в наших файлах и облегчает читаемость нашего кода. Что касается ключевого слова this, мы можем использовать его для ссылки на новый объект, который мы создаем. Что, опять же, экономит место и делает наш код более эффективным в вычислениях.
Для начала создается новая функция и добавляются свойства с использованием ключевого слова this. Затем методы назначаются всему объекту с синтаксисом
objectName.prototype.method
Чтобы создать наш объект, мы должны использовать конструктор new, который назначается переменной для вызова каждый раз, когда нам нужна функция!
Хотя создание псевдоклассического экземпляра является немного сложным для написания кода (как показано ниже), он реализует встроенные функции Javascript. Это дает один из самых оптимизированных методов создания объектов.
const Name = function(firstName, lastName){
this.obj = {};
this.firsName = firstName
this.lastName = lastName;
}
Name.prototype.speak = function(){
//insert code here
}
Name.prototype.takeIn = function(){
//insert code here
}
//function calls
const jon = new Name('jon','doe');
jon.speak();
Шаблон инстанцирования ES6 (E.6.)
Экземпляр ES6 использует ключевое слово classes. Использование ключевого слова class позволяет использовать другую форму создания объектов. Внутри класса должна быть вложена функция-конструктор; таким образом, формируется область класса.
Экземпляр ES6 обеспечивает более простую реализацию методов и более простое управление памятью. Однако этот шаблон усложняет синтаксис и может привести к некоторым проблемам, связанным с более старыми версиями браузеров/операционных систем.
class Name{
constructor(firstName){
this.speak = firstName;
this.takeIn = 'larry'
}
speak(){
return this.name
}
takeIn(){
return this.takeIn
}
}
const jon = new Name('jon')
В заключении
Шаблоны создания экземпляров встречаются во всем Javascript. Их использование может улучшить ваш код за счет удобочитаемости, эффективности и управления памятью. В целом, шаблоны создания экземпляров могут быть трудны для расшифровки поначалу, но после некоторой практики вы сможете понять их полностью!