Оператор instanceof - позволяет узнать принадлежит ли объект классу или классу наследующему от него.
Перед прочтенем статьи рекомендуется ознакомиться с new, __proto__, prototype.
См. также Object.create, constructor.
Синтаксис
объект instanceof Конструктор;
Примеры
Пример
Посмотрим несколько примеров:
[] instanceof Array; //true
[] instanceof Object; //true
[] instanceof RegExp; //false
new RegExp() instanceof RegExp //true;
new RegExp() instanceof Object //true;
new RegExp() instanceof Array //false;
function User() {}
new User() instanceof User //true
new User() instanceof Object //true
new User() instanceof Array //false
Таким образом можно видеть, что массивы принадлежат классу Array, но в тоже время принадлежит классу Object (так как Array наследует от Object). Тоже самое и с RegExp, и любым другим конструктором.
Пример
Имеем конструктор:
function User(name) {
this.name = name;
}
var andrey = new User('Андрей');
Но если его вызвать без new, то он будет работать не правильно: в обычно режиме this будет равно window, а в строгом - будет ошибка. Если нужно чтобы конструктор работал правильно и без new можно писать так:
function User(name) {
if ( !(this instanceof User) ) {
return new User(name);
}
this.name = name;
}
var andrey = new User('Андрей');
var jon = User('Джон');
Работает это так: если фукнцию вызвали без new, то this в ней равен объекту перед последней точкой, либо window(или undefined) если точек нет (см. статью про this). Следовательно this - это уже не экземпляр User, а значит условие сработает. И конструктор будет вызван уже с new.