В JavaScript класс может использоваться для реализации объектно-ориентированного программирования. Тем не менее, классы в JavaScript отличаются от классов в Java, а их соответствующие определения и использование также различны.
Определение классов в JavaScript
В JavaScript все объекты, полученные из одного и того же объекта прототипа (прототип), образуют класс; То есть классы в JavaScript являются понятиями коллекции объектов. Если два объекта имеют одинаковый прототип, они принадлежат к одному классу; Занятия в JavaScript даже не нужны имена классов. Следующий код является примером:
Кода -копия выглядит следующим образом:
var p = {x: 42};
var a = object.create (p);
var b = object.create (p);
Console.log (a === b); // false
console.log (object.getPrototypeof (a) === object.getPrototypeof (b)); // true
В приведенном выше примере объекты A и B имеют один и тот же прототип объекта (прототип) P, поэтому A и B принадлежат к одному классу (хотя ни один из этого класса не имеет имени класса), и они наследуют свойство x со значением 42 из объекта Prototype P.
Из этого примера мы видим, что функция объекта прототипа эквивалентна шаблону, и из него можно получить несколько объектов. Его статус такой же, как у кода класса на языке Java, и является ядром определения класса в JavaScript. Объект прототипа в следующем примере будет выглядеть больше похоже на код класса:
Кода -копия выглядит следующим образом:
var p = {
Urment_by: 1,
Приращение: функция (x) {
вернуть x + this.increment_by;
}
}
var a = object.create (p);
var b = object.create (p);
Console.log (a.increment (7)); // 8
Console.log (b.increment (9)); // 10
В приведенном выше примере Prototype Object P определяет свойство (urment_by) со значением 1 и функцией с именем увеличения; Объекты A и B Получают функции увеличения и приращения из шаблона p. При вызове функции приращения объекта A или B JavaScript попытается получить значение urcrement_by a или b (this.increment_by); Поскольку INGREMENT_BY получается из P, его значения являются 1 - переменные с одинаковыми значениями, аналогичные статическим переменным класса в Java. Следовательно, в приведенном выше примере все символы капитала используются при названии переменной recare_by.
В приведенном выше примере все объекты, созданные из шаблона P (объекты, принадлежащие к одному классу), имеют одинаковые свойства и поведение. Но на самом деле, для разных объектов одного и того же класса, в дополнение к определению атрибутов/поведения, определяемых классом, они часто имеют уникальные атрибуты и поведение. Поэтому, если вам нужно использовать шаблон прототипа в качестве класса, вы должны настроить каждый объект, полученный из него:
Кода -копия выглядит следующим образом:
var p = {
Urment_by: 1,
Приращение: функция (x) {
вернуть x + this.increment_by + this.custom_increment_by;
}
}
var a = object.create (p);
var b = object.create (p);
a.custom_increment_by = 0;
b.custom_increment_by = 1;
Console.log (a.increment (7)); // 8
Console.log (b.increment (9)); // 11
В этом примере объекты A и B, созданные из шаблона P, имеют переменную custom_increment_by, значения которых не обязательно равны друг другу, а конечный результат их поведения функции Increment () связан со значением custom_increment_by. Вообще говоря, работа по настройке новых объектов часто выполняется в единой функции:
Кода -копия выглядит следующим образом:
var p = {
Urment_by: 1,
Приращение: функция (x) {
вернуть x + this.increment_by + this.custom_increment_by;
}
}
функция getIncrementalCassObject (CustomIncrementByvalue) {
var ingrementalObj = object.create (p);
IGREMEMENTALOBJ.CUSTOM_INCREMENT_BY = CUSTOMINCRENTBYVALUE;
вернуть IngrementalObj;
}
var a = getIncrementalCassObject (0);
var b = getIncrementalCasoBject (1);
Console.log (a.increment (7)); // 8
Console.log (b.increment (9)); // 11
Таким образом, определение класса выполняется через функции Prototype Object P и функции GetIncrementAlCassObject (): объекты прототипа, чьи объекты прототипа могут быть получены, вызывая функцию getIncrementalCassObject (), и эти новые объекты могут быть настроены в определенной степени во время вызова для функции getIncrementalCobject (). Стоит отметить, что в настоящее время в этом определенном классе нет имени класса. Для описания это будет называться постепенным.
Оглядываясь назад на работу, выполненную в функции getIncrementalCassObject (), вы можете увидеть, что процесс создания нового объекта из инкрементного класса выглядит следующим образом:
1. Создать пустой объект и определить его объект прототипа как p.
2. Настройте этот недавно созданный пустой объект в соответствии с различными значениями параметров.
3. вернуть новый объект, который был настроен.
В JavaScript вы можете быстро завершить определение класса и создание новых объектов, используя конструктор.
Конструктор (конструктор) в JavaScript
Из примера инкрементного класса выше, мы видим, что определение нового класса требует две части кода: создание объекта прототипа в качестве шаблона, создание пользовательской функции для инициализации нового объекта; Создание нового объекта из класса проходит три процесса: указание объекта прототипа нового объекта, настройка/инициализация нового объекта и возврат этого нового объекта. В JavaScript все это может быть сделано через конструктор (конструктор).
Конструктор в JavaScript - это функция, которая несет ответственность за инициализацию нового объекта; Прототип этой функции конструктора используется в качестве шаблона для создания нового объекта. Принимая приведенный выше инкрементный класс в качестве примера, после использования конструктора для переписывания кода, он выглядит так:
Кода -копия выглядит следующим образом:
функция инкрементная (CustomIncrementByvalue) {
this.custom_increment_by = cumentincrementbyvalue;
}
Incremental.prototype = {
Urment_by: 1,
Приращение: функция (x) {
вернуть x + this.increment_by + this.custom_increment_by;
}
}
var a = new Incremental (0);
var b = new Incremental (1);
Console.log (a.increment (7)); // 8
Console.log (b.increment (9)); // 11
Процесс создания нового объекта с использованием функции конструктора через новое ключевое слово фактически проходит следующие этапы:
Создайте новый пустой объект.
1. Укажите объект прототипа этого объекта на свойство прототипа функции конструктора.
2. Используйте этот объект в качестве параметра и выполните функцию конструктора.
3. Это то же самое, что и предыдущая работа, выполненная в функции getIncrementalCassObject ().
Название класса
При создании объекта с использованием конструктора соответствующий объект имеет «имя класса», которое можно проверить из результата экземпляра оператора:
Кода -копия выглядит следующим образом:
console.log (экземпляр инкрементного); // true
console.log (b exancefor incremental); // true
Однако оператор экземпляра не определяет, создается ли объект инкрементным конструктором. Оператор экземпляра только определяет, является ли объект прототипа объекта инкрементным. Прототип. Когда есть два конструктора с одним и тем же прототипом, оператор экземпляра вернет истинно равномерно, не различая, какой конструктор используется для создания объекта.
Кода -копия выглядит следующим образом:
Функция Ingremental2 (CustomIncrementByvalue) {
this.custom_increment_by = cumentiNcrementByvalue + 3;
}
Incremental2.prototype = Incremental.prototype;
console.log (экземпляр incremental2); // true