Когда мы говорим об объекте -ориентированном, мы можем думать о классе, объектах, упаковке, наследстве, полиморфизме. В книге «JavaScript Advanced Program Design» (People's Post и Telecommunications Press, Cao Li, Zhang Xin. Английское имя: профессиональный JavaScript для веб -разработчиков) описано в книге. Давайте посмотрим на различные методы, определенные в JavaScript.
1 Фабричный метод
Создайте наш собственный класс и объекты в JavaScript, мы должны освоить.
Код кода копирования следующим образом:
<script type = "text/javascript">
//определение
var ocar = new Object ();
ocar.color = "red";
ocar.doors = 4;
ocar.showcolor = function () {
Предупреждение (this.color);
}
// Вызов
ocar.showcolor ();
</script>
Мы просты в использовании объектов OCAR, но мы создаем несколько экземпляров автомобилей. Мы можем использовать функцию для инкапсуляции кода выше для реализации:
Код кода копирования следующим образом:
<script type = "text/javascript">
//определение
функция createCar () {
var ocar = new Object ();
ocar.color = "red";
ocar.doors = 4;
ocar.showcolor = function () {
Предупреждение (this.color);
}
Вернуть Окар;
}
// Вызов
var Ocar1 = createCar ();
var Ocar2 = createCar ();
ocar1.color = "черный";
ocar1.showcolor ();
ocar2.showcolor ();
</script>
Кстати, атрибуты членства по умолчанию объекта JavaScript являются общедоступными. Таким образом, мы называем это фабричным методом, и мы создали фабрики, которые могут создавать и возвращать определенные типы объектов.
Это немного интересно, но в объекте -ориентированном объекте метод создания объекта:
Автомобиль = новый автомобиль ();
Использование новых ключевых слов было глубоко укоренилось в сердцах людей, поэтому мы используем приведенный выше метод для его определения. Полем Давайте посмотрим на определение формы конструктора.
2 Конструктор
Этот метод выглядит немного как заводская функция. Конкретная производительность заключается в следующем:
Код кода копирования следующим образом:
<script type = "text/javascript">
//определение
Функциональный автомобиль (цвет, двери) {
this.color = color;
this.doors = двери;
this.showcolor = function () {
Предупреждение (this.color);
};
}
// Вызов
var car1 = новый автомобиль ("красный", 4);
var Car2 = новый автомобиль ("синий", 4);
Car1.showcolor ();
car2.showcolor ();
</script>
Это выглядит очевидно, есть различия. Это кажется немного интересным. Создайте объект внутри функции построения, используя эти ключевые слова, и он очень любезен создавать объекты, используя новый вычислительный символ. Но есть также некоторые проблемы: каждый раз, когда создается новый объект, все атрибуты, включая создание функции, то есть несколько объектов являются полностью независимыми. Объект CAR1 и CAR2. Это преимущество исходной формы.
3 Прототип
Используя атрибут прототипа объекта, вы можете увидеть прототип, от которого зависит новый объект. Метод заключается в следующем:
Код кода копирования следующим образом:
<script type = "text/javascript">
//определение
Fuinction Car () {
};
Car.prototype.color = "red";
Car.prototype.doors = 4;
Car.prototype.drivers = new Array («Том», «Джерри»);
Car.prototype.showcolor = function () {
Предупреждение (this.color);
}
// Вызов:
var car1 = new Car ();
var car2 = new Car ();
Car1.showcolor ();
car2.showcolor ();
блюд (Car1.divers);
car1.divers.push ("Стивен");
оповещение (Car1.divers);
оповещение (Car2.divers);
// Вы можете использовать JSON для упрощения определения прототипа:
Car.prototype =
{{
Цвет: "красный",
Двери: 4,
Водители: [«Том», «Джерри», «Сафдад»],
ShowColor: function () {
Предупреждение (this.color);
}
}
</script>
Прежде всего, конструктор этого кода, кода нет, а затем добавьте атрибут объекта для определения атрибута объекта CAR через атрибут прототипа объекта. Этот метод очень хороший, но проблема в том, что объект автомобиля указывает на указатель массива. Car2 также в то же время это не допускается.
В то же время проблема также проявляется в прототипе, который не может привести к каким -либо параметрам инициализации, что делает конструктор не может инициализировать нормально. Это требует другого способа решения: это смешанный режим конструктора/прототипа.
4. Смешанный конструктор/режим прототипа
Комбинация конструктора и прототипа очень удобна для определения класса.
Код кода копирования следующим образом:
<script type = "text/javascript">
//определение
Функциональный автомобиль (цвет, двери)
{{
this.color = color;
this.doors = двери;
this.divers = new Array ("Tom", "Jerry");
}
Car.prototype.showcolor = function () {
Предупреждение (this.color);
}
// Вызов:
var car1 = новый автомобиль ('red', 4);
var Car2 = новый автомобиль ('Blue', 4);
Car1.showcolor ();
car2.showcolor ();
блюд (Car1.divers);
car1.divers.push ("Стивен");
оповещение (Car1.divers);
оповещение (Car2.divers);
Блюдо (экземпляр автомобиля CAR1);
</script>
Этот метод должен определить атрибуты внутри и использовать прототип, чтобы определить его снаружи. Проблема решения третьего метода.
Этот метод должен быть очень дружелюбным, но по сравнению с грамматикой Java должна быть некоторая дисгармония, и он чувствует себя более грязным. Для персонала J2EE R & D этот метод всегда неловкий. Всегда чувствует, что это не дружелюбная упаковка считается, что это более хлопотно. Это динамический прототип.
5. Динамический прототип
Для разработчиков, которые привыкли использовать другие языки, использование смешанного конструктора/прототипов не так гармонично. В конце концов, при определении категорий большинство языков, ориентированных на объект, визуально упакованы на атрибуты и методы. Рассмотрим следующий класс C#:
Код кода копирования следующим образом:
класс автомобиль // класс
{{
public String Color = "red";
Public Int Doors = 4;
Public Int MPG = 23;
Общественный автомобиль (струнный цвет, дверь int, int mpg) // Конструктор
{{
this.color = color;
this.doors = двери;
this.mpg = mpg;
}
public void showcolor () // medhod
{{
Console.writeline (this.color);
}
}
C#хорошо упакована все атрибуты и методы класса автомобиля, поэтому, когда вы видите этот код, вы знаете, каких функций это для достижения, и определяет информацию объекта. Люди, которые критикуют конструктор/прототип смешанных конструкторов, считают, что метод поиска атрибутов в памяти конструктора и метод поиска методов за пределами него не является логичным. Поэтому они разработали динамический прототип, чтобы обеспечить более дружественный стиль кодирования.
Основная идея метода динамического прототипа такая же, как конструктор/прототип смешанной структуры, то есть определение нефункциональных атрибутов в конструкторе, а атрибут функции определяется с использованием атрибута прототипа. Единственная разница - это положение метода объекта. Ниже приводится класс автомобилей, переписанный динамическим прототипом:
Код кода копирования следующим образом:
<script type = "text/javascript">
//определение
Fuinction Car () {
this.color = "red";
this.doors = 4;
this.divers = new Array ("Tom", "Jerry");
ifof Car._Initialize == "Undefined") {{
Car.prototype.showcolor = function () {
Предупреждение (this.color);
}
// ............
}
// последнее определение
Car._initialize = true;
}
</script>
До тех пор, пока не проверяет тип car._initialized эквивалент, равный «неопределенным», этот конструктор не изменился. Эта строка кода является наиболее важной частью метода динамического прототипа. Если это значение не определена, конструктор будет продолжать определять метод объекта с помощью прототипа, а затем устанавливать CAR._Initialized на TRUE. Если это значение определено (когда его значение верно, значение типа является логическим), то этот метод не будет создан. Короче говоря, этот метод использует логотип (_initialized), чтобы определить, дал ли он какой -либо метод прототипу. Этот метод создается и назначен только один раз.
6 метод гибридного завода
Этот метод обычно является способом изменить путь, когда предыдущий метод не может быть применен. Его цель - создать поддельный конструктор и вернуть только новый пример другого объекта. Этот код, кажется, очень похож на заводскую функцию:
Код кода копирования следующим образом:
Fuinction Car () {
var ompcar = new Object ();
Ionmpcar.color = "red";
Ionmpcar.doors = 4;
Ionmpcar.mpg = 23;
Ionmpcar.showcolor = function () {
Предупреждение (this.color);
}
Вернуть otempcar;
}
В отличие от классического метода, этот метод использует новый оператор, чтобы он выглядел как функция реальной структуры:
var ocar = new Car ();
Поскольку новый оператор называется внутри конструктора CAR (), второй новый оператор будет игнорироваться (расположен за пределами конструктора). Объект, созданный в конструкторе, передается обратно в переменную Var. Этот метод имеет те же проблемы, что и классические методы метода объекта. Настоятельно рекомендуется: если вам не нужно (см. Главу 15), вы все равно избегаете этого метода.
Резюме: (какой метод используется)
В настоящее время наиболее широко используется смешанный конструктор/прототип. Кроме того, динамические прототипы также очень популярны и эквивалентны функции функции/прототипа в функции. Вы можете использовать любой из этих двух методов. Однако не используйте классический конструктор или прототип, потому что это введет код для проблемы.
Код кода копирования следующим образом:
// пс
// Статический класс (1: функция)
varcollection = new Function () {
var _carcollection = new Array ();
this.add = function (objcar) {
оповещение ('добавить');
}
this.get = function (carid) {
оповещение ('Get');
}
}
// Статический класс (2: JSON)
var car = {
Цвет: 'красный',
Двери: 4,
ShowColor: function () {alert (this.color);}
}
Car.showcolor ();