представлять
Эта статья в основном представляет следующую статью шаблона создания объектов. Использование различных методов может значительно избежать ошибок или написать очень оптимизированный код.
Паттерн 6: Синтаксис функции сахар
Функциональный синтаксис сахар - это расширение для быстрого добавления методов (функций) в объект. Это в основном использует характеристики прототипа. Код относительно прост. Давайте сначала посмотрим на код реализации:
Кода -копия выглядит следующим образом:
if (typeof function.prototype.method! == "function") {
Function.prototype.method = function (имя, реализация) {
this.prototype [name] = реализация;
вернуть это;
};
}
При расширении объекта вы можете использовать его так:
Кода -копия выглядит следующим образом:
var person = function (имя) {
this.name = name;
}
.method ('GetName',
function () {
вернуть это. name;
})
.method ('setName', function (name) {
this.name = name;
вернуть это;
});
Таким образом, мы добавляем два метода: GetName и SetName к функции человека. Далее давайте подтвердим результат:
Кода -копия выглядит следующим образом:
var a = новый человек ('Adam');
console.log (a.getName ()); // 'Адам'
console.log (a.setname ('eve'). getName ()); // 'Канун'
Паттерн 7: Постоянная объект
Константы объекта являются вариантом осуществления различных методов, предоставленных набором, получить, заказанную в объекте. Более того, метод SET будет сохранять только первый набор объектов, а более поздние настройки будут недействительными, что достигло того, что другие не могут перегружать. Код реализации выглядит следующим образом:
Кода -копия выглядит следующим образом:
var constant = (function () {
var Constants = {},
OwnProp = object.prototype.hashownproperty,
// разрешены только три типа значений
разрешено = {
Строка: 1,
номер: 1,
Логин: 1
},
prefix = (math.random () + "_"). Slice (2);
возвращаться {
// Установить свойство с именем именем
Установить: функция (имя, значение) {
if (this.isdefined (name)) {
вернуть ложь;
}
if (! ownprop.call (разрешен, тип значения)) {
вернуть ложь;
}
Константы [префикс + name] = value;
вернуть истину;
},
// определить, есть ли свойство с именем
ISdefined: function (name) {
return ownprop.call (constants, prefix + name);
},
// Получить атрибут с именем
get: function (имя) {
if (this.isdefined (name)) {
вернуть константы [префикс + name];
}
вернуть ноль;
}
};
} ());
Код проверки следующим образом:
Кода -копия выглядит следующим образом:
// Проверьте, существует ли он
console.log (constant.isdefined ("maxwidth")); // ЛОЖЬ
// Определение
console.log (constant.set ("maxwidth", 480)); // истинный
// повторный тест
console.log (constant.isdefined ("maxwidth")); // истинный
// Попробуйте переопределить
console.log (constant.set ("maxwidth", 320)); // ЛОЖЬ
// определить, существует ли исходное определение
console.log (constant.get ("maxwidth")); // 480
Режим 8: Режим песочницы
Режим песочницы обеспечивает отдельный контекст для одного или нескольких модулей, не влияя на контекст других модулей. Например, есть песочница с тремя методами события, DOM и Ajax. Если двое из них призваны для формирования среды, нет вмешательства в три среды. Код реализации песочницы выглядит следующим образом:
Кода -копия выглядит следующим образом:
Функция Sandbox () {
// конвертировать параметры в массив
var args = array.prototype.slice.call (аргументы),
// Последний параметр - обратный вызов
обратный вызов = args.pop (),
// за исключением последнего параметра, все другие модули будут выбраны
modules = (args [0] && typeof args [0] === "String")? args: args [0],
я;
// заставляют нового оператора
if (! (Этот экземпляр песочницы)) {
вернуть новую песочницу (модули, обратный вызов);
}
// Добавить свойства
this.a = 1;
this.b = 2;
// Добавить модули в этот объект
// Если нет модуля или параметра передачи "*" ", то все модули передаются в
if (! Модули || modules == '*') {
модули = [];
для (i in Sandbox.modules) {
if (sandbox.modules.hasownproperty (i)) {
modules.push (i);
}
}
}
// Инициализировать требуемый модуль
for (i = 0; i <modules.length; i += 1) {
Sandbox.modules [Modules [i]] (это);
}
// вызовов вызовов
обратный вызов (это);
}
// Добавить объект прототипа по умолчанию
Sandbox.prototype = {
Имя: «Мое приложение»,
Версия: "1.0",
getName: function () {
вернуть это. name;
}
};
Затем мы определяем начальный модуль по умолчанию:
Кода -копия выглядит следующим образом:
Sandbox.modules = {};
Sandbox.modules.dom = function (box) {
box.getElement = function () {
};
box.getStyle = function () {
};
box.foo = "bar";
};
Sandbox.modules.event = function (box) {
// При необходимости доступ к прототипу песочницы:
// box.constructor.prototype.m = "mmmm";
box.attachevent = function () {
};
box.detachevent = function () {
};
};
Sandbox.modules.ajax = function (box) {
box.makerequest = function () {
};
box.getResponse = function () {
};
};
Метод вызова выглядит следующим образом:
Кода -копия выглядит следующим образом:
// метод вызова
Песочница (['ajax', 'Event'], function (box) {
console.log (typeof (box.foo));
// нет выбора DOM, поэтому Box.foo не существует
});
Sandbox ('ajax', 'dom', function (box) {
console.log (typeof (box.attachevent));
// нет выбранного события, поэтому AttactEvent, определенное в случае, тоже не существует
});
Sandbox ('*', function (box) {
console.log (box); // Все методы, определенные выше, доступны
});
Через три различных метода вызова мы видим, что контекст трех методов отличается. Первый не имеет Foo; Второй не имеет AttactEvent, потому что только Ajax и DOM загружаются, но событие не загружается; Третий не загружает все.
Образец 9: Статические члены
Статические члены - это просто статические свойства, предоставляемые функцией или объектом, которые можно разделить на частные и общественные, как и общественный статический и частный статический статический в C# или Java.
Давайте сначала посмотрим на публичных членов. Общественные члены очень просты. Методы и функции, которые мы объявляем, обычно являются публичными, например:
Кода -копия выглядит следующим образом:
// конструктор
var gadget = function () {
};
// общественный статический метод
Gadget.isshiny = function () {
вернуть "вы держите пари";
};
// нормальный метод добавления в прототип
Gadget.prototype.setprice = function (цена) {
this.price = цена;
};
// вызовать статические методы
console.log (gadget.isshiny ()); // "Вы держите пари"
// Создать экземпляр и вызовать метод
var iPhone = new Gadget ();
iPhone.SetPrice (500);
console.log (typeof gadget.setprice); // "неопределенный"
console.log (typeof iPhone.isshiny); // "неопределенный"
Gadget.prototype.isshiny = gadget.isshiny;
console.log (iPhone.isshiny ()); // "Вы держите пари"
Что касается частных статических участников, мы можем использовать их функции закрытия для их реализации. Ниже приведены два метода реализации.
Первый метод реализации:
Кода -копия выглядит следующим образом:
var gadget = (function () {
// Статические переменные/свойства
var счетчик = 0;
// Закрытие возвращает новую реализацию конструктора
return function () {
console.log (счетчик += 1);
};
} ()); // выполнить немедленно
var g1 = new Gadget (); // журналы 1
var g2 = new Gadget (); // журналы 2
var g3 = new Gadget (); // журналы 3
Можно видеть, что, хотя это новый объект каждый раз, число все еще увеличивается, достигая цели статических членов.
Второй метод:
Кода -копия выглядит следующим образом:
var gadget = (function () {
// Статические переменные/свойства
var счетчик = 0,
Ньюгаджет;
// Новая реализация конструктора
Newgadget = function () {
счетчик += 1;
};
// авторизовать доступ к методам
Newgadget.prototype.getlastid = function () {
возвратный счетчик;
};
// перезаписать конструктор
вернуть Ньюгаджет;
} ()); // выполнить немедленно
var iPhone = new Gadget ();
iPhone.getLastid (); // 1
var iPod = new Gadget ();
iPod.getLastid (); // 2
var iPad = new Gadget ();
ipad.getlastid (); // 3
Число также увеличивается, что достигается с использованием функции закрытия его метода внутреннего авторизации.
Суммировать
Это следующая статья режима создания объекта. Две статьи вместе имеют 9 узоров. Это режимы создания объектов, которые мы часто используем в ежедневном программировании JavaScript. Различные сценарии играют разные роли. Я надеюсь, что все выберут применимый режим в соответствии с их соответствующими потребностями.