Почти 20 лет назад, когда родился JavaScript, это был просто простой язык веб -сценариев. Если вы забудете заполнить свое имя пользователя, оно появится предупреждение.
В настоящее время он стал почти всемогущим, со всеми видами невероятных применений с переднего конца до заднего конца. Программисты используют его для завершения все более крупных проектов.
Сложность кода JavaScript также резко возросла. Одна веб -страница содержит 10000 строк кода JavaScript, что давно является обычным явлением. В 2010 году инженер показал, что длина кода Gmail составляет 443 000 строк!
Чтобы написать и поддерживать такой сложный код, необходимо использовать модульные стратегии. В настоящее время основной подход в отрасли состоит в том, чтобы принять «объектно-ориентированное программирование». Следовательно, то, как JavaScript реализует объектно-ориентированное программирование, стало горячей темой.
Проблема в том, что синтаксис Javascipt не поддерживает «класс» (класс), что делает традиционные объектно-ориентированные методы программирования невозможными непосредственно. Программисты провели много исследований, чтобы изучить, как смоделировать «классы» с помощью JavaScript. В этой статье суммируются три метода JavaScript, определяющие «классы», обсуждают характеристики каждого метода и подчеркивают лучший метод в моих глазах.
=====================================================================
Три способа определения класса в JavaScript
В объектно-ориентированном программировании класс-это шаблон для объекта, который определяет свойства и методы, разделяемые той же группой объектов (также известных как «экземпляры».
Язык JavaScript не поддерживает «классы», но некоторые обходные пути могут использоваться для имитации «классов».
1. Метод конструктора
Это классический метод и метод обязательного обучения в учебниках. Он использует конструктор для имитации «класса» и использует это ключевое слово для обозначения объекта экземпляра внутри него.
Кода -копия выглядит следующим образом:
Функция cat () {
this.name = "большие волосы";
}
При генерации экземпляра используйте новое ключевое слово.
Кода -копия выглядит следующим образом:
var cat1 = new cat ();
оповещение (cat1.name); // большие волосы
Свойства и методы класса также могут быть определены на объекте прототипа конструктора.
Кода -копия выглядит следующим образом:
Cat.prototype.makesound = function () {
Блюдо ("Meow Meow");
}
Для получения подробного введения в этот метод, пожалуйста, посмотрите серию статей, которые я написал, «JavaScript объектно-ориентированное программирование», я не буду говорить об этом здесь. Его основной недостаток заключается в том, что он относительно сложный и использует этот и прототип, который очень трудоемкий для написания и чтения.
2. object.create () Метод
Чтобы решить недостатки «метода конструктора» и для более удобного генерирования объектов, пятое издание Ecmascript, международного стандарта JavaScript (в настоящее время доступно третье издание), предложило новый Method Object.create ().
Используя этот метод, «класс» является объектом, а не функцией.
Кода -копия выглядит следующим образом:
var cat = {
Название: "большие волосы",
MAKESOUND: function () {Alert ("Meow Meow Meow"); }
};
Затем используйте object.create () непосредственно для генерации экземпляра без использования нового.
Кода -копия выглядит следующим образом:
var cat1 = object.create (cat);
оповещение (cat1.name); // большие волосы
cat1.makesound (); // meow meow meow meow
В настоящее время последние версии крупных браузеров (включая IE9) развернули этот метод. Если вы столкнетесь с старым браузером, вы можете использовать следующий код для развертывания самостоятельно.
Кода -копия выглядит следующим образом:
if (! object.create) {
Object.create = function (o) {
Функция f () {}
F.Prototype = O;
вернуть новый f ();
};
}
Этот метод проще, чем «метод конструктора», но он не может реализовать частные атрибуты и частные методы, и данные не могут быть переданы между объектами экземпляра, поэтому моделирование «классов» недостаточно всеобъемлющее.
3. Минималистский закон
Голландский программист Габор де Муйдж предложил новый подход, который был лучше, чем Object.Create (), который он назвал «минималистским подходом». Это также метод, который я рекомендую.
3.1 Упаковка
Этот метод не использует это и прототип, и код очень прост в развертывании, поэтому, вероятно, он называется «минималистский закон».
Прежде всего, он также использует объект для имитации «класса». В этом классе определите конструктор CreateNew (), чтобы сгенерировать экземпляр.
Кода -копия выглядит следующим образом:
var cat = {
createNew: function () {
// какой -то код здесь
}
};
Затем, в createNew (), определите объект экземпляра и используйте этот объект экземпляра в качестве возвращаемого значения.
Кода -копия выглядит следующим образом:
var cat = {
createNew: function () {
var cat = {};
cat.name = "Большие волосы";
cat.mokesound = function () {alert ("meow meow"); };
вернуть кошку;
}
};
При использовании метода CreateNew (), чтобы получить объект экземпляра.
Кода -копия выглядит следующим образом:
var cat1 = cat.createnew ();
cat1.makesound (); // meow meow meow meow
Преимущество этого подхода состоит в том, что его легко понять, имеет четкую и элегантную структуру и соответствует традиционной конструкции «объектно-ориентированное программирование», так что следующие функции могут быть легко развернуты.
3.2 Наследование
Очень удобно внедрить один класс в следующем классе. Просто назовите метод Createnew () последнего в методе CreateNew ().
Сначала определите класс животных.
Кода -копия выглядит следующим образом:
var Animal = {
createNew: function () {
var Animal = {};
Animal.sleep = function () {alert ("Sleep In"); };
возвращение животного;
}
};
Затем в методе Cat CreateNew () называется метод Animal CreateNew ().
Кода -копия выглядит следующим образом:
var cat = {
createNew: function () {
var cat = Animal.CreatEnew ();
cat.name = "Большие волосы";
cat.mokesound = function () {alert ("meow meow"); };
вернуть кошку;
}
};
Экземпляр CAT, полученный таким образом, будет наследовать как класс CAT, так и класс животных.
Кода -копия выглядит следующим образом:
var cat1 = cat.createnew ();
cat1.sleep (); // спать в
3.3 частные атрибуты и частные методы
В методе CreateNew (), если методы и свойства, которые не определены на объекте CAT, являются частными.
Кода -копия выглядит следующим образом:
var cat = {
createNew: function () {
var cat = {};
var sound = "meow meow meow";
cat.mokesound = function () {alert (sound); };
вернуть кошку;
}
};
Внутренний звук переменной в приведенном выше примере не может быть прочитан снаружи и может быть прочитал только с помощью публичного метода CAT Maseound ().
Кода -копия выглядит следующим образом:
var cat1 = cat.createnew ();
предупреждение (cat1.sound); // неопределенный
3.4 Обмен данными
Иногда нам нужны все объекты экземпляра, чтобы иметь возможность читать и писать одни и те же внутренние данные. В настоящее время просто инкапсулирует эти внутренние данные внутри объекта класса и за пределами метода CreateNew ().
Кода -копия выглядит следующим образом:
var cat = {
Звук: "Meow Meow Meow",
createNew: function () {
var cat = {};
cat.makesound = function () {alert (cat.sound); };
Cat.ChangesOund = function (x) {cat.Sound = x; };
вернуть кошку;
}
};
Затем генерируются два объекта экземпляра:
Кода -копия выглядит следующим образом:
var cat1 = cat.createnew ();
var cat2 = cat.createnew ();
cat1.makesound (); // meow meow meow meow
В настоящее время, если есть объект экземпляра, и общие данные изменяются, также будет затронут другой объект экземпляра.
Кода -копия выглядит следующим образом:
cat2.changesound ("lalala");
cat1.makesound (); // Лалала
(над)