Javascript constructor

Javascript constructor

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы говорили про методы типа данных Object в Javascript. В данной статье я бы хотел поговорить про свойство, которое есть у каждой переменной в Javascript — это constructor.

Понятие класса-конструктора

Все типы данных в Javascript, за исключением тривиальных типов (null, undefined) имеют собственные классы-конструкторы. При их вызове используется оператор вызова функций "()". По сути, классы-конструкторы – это функции. Мы их вызываем для создания экземпляра этого класса и передаем в качестве аргументов некоторые значения (точно также происходит и при вызове функций). В результате мы получаем экземпляр типа данных, который обладает определенными унаследованными свойствами и методами, характерными для своего типа данных. Узнать, какой класс-конструктор был использован при создании значения любой переменной можно, как раз, с помощью свойства "constructor":

var a = 10;
alert(a.constructor);
var b = [];
alert(b.constructor);

Для этого примера получим следующий вывод:

function Number() { [native code] }
function Array() { [native code] }

"[native code]" — это нативный код, который выводится вместо самого кода в теле функции. Данного кода много, и он не представляет какого-либо интереса. Ведь мы просто узнаём с помощью какого класса была создана переменная.

Оператор "instanceof"

С помощью данного оператора можно также определить принадлежность типа данных:

var a = {} // создаём пустой объект
alert(a instanceof Object); // вернёт true
alert(a instanceof Array); // вернёт false
var b = []; //создаём пустой массив
alert(b instanceof Array); // вернёт true
alert(b instanceof Object); // вернёт true (обращаем внимание, что здесь тоже true)

Тип данных "Object" является прародителем для всех типов данных в Javascript. Все встроенные и пользовательские классы-конструкторы (поговорим о них в следующей статье) наследуют методы этого типа. По факту, можно сказать, что вся структура классов в Javascript — двухуровневая. Во главе стоит один класс Object, все остальные классы — его непосредственные потомки.

Хочу обратить ваше внимание на тот факт, что оператор "instanceof" для базовых типов данных, созданных с помощью литералов (в данном случае без использования ключевого слова "new"), вернет "false". В документации сказано, что связано с особенностью реализации базовых типов данных. Пример:

var a = 10; // создаем экземпляр Number с помощью литерала
alert(a instanceof Number); // вернёт false
var b = new Number(10); //создаем экземпляр Number с помощью вызова класса-конструктора
alert(b instanceof Number); // вернёт true

В данной статье мы познакомились в классами-конструкторами в Javascript, а также узнали про свойство constructor.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *