представлять
Эта статья в основном представляет шаблон создания объектов. Использование различных методов может значительно избежать ошибок или написать очень оптимизированный код.
Образец 1: пространство имен
Пространства имен могут уменьшить количество глобального именования, необходимого, чтобы избежать конфликтов именования или чрезмерности. Как правило, когда мы определяем уровень объекта, он часто выглядит так:
Кода -копия выглядит следующим образом:
var app = app || {};
app.modulea = app.modulea || {};
app.modulea.submodule = app.modulea.submodule || {};
app.modulea.submodule.methoda = function () {
console.log ("print a");
};
app.modulea.submodule.methodb = function () {
console.log ("print b");
};
Если есть много уровней, мы должны продолжать так, что очень запутанно. Паттерн пространства имен существует, чтобы решить эту проблему. Давайте посмотрим на код:
Кода -копия выглядит следующим образом:
// Небезопасно, это может перезаписать существующие объекты MyApp
var myApp = {};
// отлично
if (typeof myApp === "undefined") {
var myApp = {};
}
// более простой способ
var myApp = myApp || {};
// Определите общие методы
Myapp.namespace = function (ns_string) {
var parts = ns_string.split ('.'),
родитель = myApp,
я;
// по умолчанию, если первый узел будет MyApp, он будет игнорироваться, например, myApp.modulea
if (parts [0] === "myApp") {
части = parts.slice (1);
}
for (i = 0; i <parts.length; i += 1) {
// Если свойства не существует, создайте
if (typeof parent [parts [i]] === "undefined") {
родитель [части [i]] = {};
}
родитель = родитель [части [i]];
}
вернуть родитель;
};
Вызовать код очень просто:
Кода -копия выглядит следующим образом:
// после пространства имен возвращаемое значение можно назначить локальной переменной
var module2 = myApp.namespace ('myapp.modules.module2');
console.log (module2 === myapp.modules.module2); // истинный
// пропустить MyApp
Myapp.namespace ('modules.module51');
// очень длинное имя
MyApp.namespace ('Once.upon.a.time.here.was.this.long.nested.property');
Образец 2: Определение зависимостей
Иногда модуль или функция могут относиться к некоторым сторонним модулям или инструментам. Лучше всего определить эти зависимые модули в начале, чтобы их можно было легко заменить в будущем.
Кода -копия выглядит следующим образом:
var myfunction = function () {
// зависит от модулей
var event = yahoo.util.event,
dom = yahoo.util.dom;
// Событие локальных переменных и DOM используются в коде после других функций
};
Образец 3: частные свойства и частные методы
JavaScript не предоставляет конкретный синтаксис для поддержки частных свойств и личных методов, но мы можем реализовать его через закрытие, код выглядит следующим образом:
Кода -копия выглядит следующим образом:
function gadget () {
// частный объект
var name = 'iPod';
// публичные функции
this.getName = function () {
вернуть имя;
};
}
var toy = new Gadget ();
// Имя не определен и является частным
console.log (toy.name); // неопределенный
// Публичное метод Имя доступа
console.log (toy.getName ()); // "iPod"
var myobj; // назначать значения myOBJ через функцию самостоятельного выполнения
(function () {
// бесплатный объект
var name = "mo, о, мой";
// реализовать публичную часть, поэтому нет VAR
myobj = {
// метод авторизации
getName: function () {
вернуть имя;
}
};
} ());
Режим 4: Режим откровения
Речь идет также о том, чтобы скрыть частные методы, что несколько похоже на шаблон модуля в «подробном понимании серии JavaScript (3): комплексный анализ модульных модулей», но это не метод возврата, но переменная объявляется извне, а затем назначает общественные методы внутренней переменной. Код заключается в следующем:
Кода -копия выглядит следующим образом:
var myarray;
(function () {
var Astr = "[объект Array]",
toString = object.prototype.toString;
функция isarray (a) {
return toString.call (a) === Astr;
}
Функция Indexof (Hay Stack, игрок) {
var i = 0,
max = haystack.length;
for (; i <max; i += 1) {
if (haystack [i] === иглы) {
вернуть я;
}
}
возврат -1;
}
// через назначение все приведенные выше сведения скрыты
myarray = {
Исаррей: Исаррей,
Индекс: индекс,
Inarray: Indexof
};
} ());
// тестовый код
console.log (myarray.isarray ([1, 2])); // истинный
console.log (myarray.isarray ({0: 1})); // ЛОЖЬ
console.log (myarray.indexof (["a", "b", "z"], "z")); // 2
console.log (myarray.inarray (["a", "b", "z"], "z")); // 2
myarray.indexof = null;
console.log (myarray.inarray (["a", "b", "z"], "z")); // 2
Режим 5: режим цепочки
Режим цепочки позволяет вам непрерывно вызывать метод объекта, например, OBJ.Add (1) .remove (2) .Delete (4) .Add (2). Идея реализации очень проста, то есть вернуть это как есть. Код заключается в следующем:
Кода -копия выглядит следующим образом:
var obj = {
значение: 1,
Приращение: function () {
это. Value += 1;
вернуть это;
},
добавить: function (v) {
this.value += v;
вернуть это;
},
кричать: function () {
console.log (this.value);
}
};
// Вызов метода цепи
obj.increment (). Добавить (3) .shout (); // 5
// также можно назвать один за другим
obj.increment ();
obj.add (3);
obj.shout ();
Суммировать
Эта статья является предыдущей статьей режима создания объекта, так что следите за новостями завтра.