Junior
Šta proverava operator instanceof u JavaScript-u?
sobes.tech АИ
Одговор од АИ
Оператор instanceof у JavaScript-у проверава да ли је објекат инстанца од одређене класе или конструктора.
Принцип рада:
- Оператор
instanceofпроверава да ли јеprototypeконструктора присутан у ланцу прототипа објекта. - Ако је
prototypeконструктора у ланцу, резултат јеtrue. - У супротном, резултат је
false.
Примери:
// Креирамо класу
class Animal {
// Конструктор
constructor(name) {
this.name = name;
}
}
// Креирамо инстанцу класе
let dog = new Animal("Buddy");
// Проверавамо да ли је dog инстанца од Animal
console.log(dog instanceof Animal); // true
// Проверавамо да ли је dog инстанца од Object (преко ланца прототипа)
console.log(dog instanceof Object); // true
// Проверавамо да ли је dog инстанца од Array (није)
console.log(dog instanceof Array); // false
// Провера са уграђеним типовима
let arr = [1, 2, 3];
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true
let num = 123;
console.log(num instanceof Number); // false (за примитиве, `instanceof` се понаша специфично)
// За примитиве креиране помоћу new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true
Карактеристике:
instanceofради кроз ланац прототипа, па резултат може битиtrueза родитељске конструкторе.- За примитивне типове (string, number, boolean, null, undefined, symbol, bigint),
instanceofобично враћаfalseако нису креирани кроз одговарајући објекат-обвивку (new String(),new Number(), итд.). - Може бити нетачан када се ради са различитим контекстима извршавања JavaScript-а (нпр. различити прозори или iframe-ови), јер сваки контекст има своје конструкторе.
Слични приступи за проверу типа:
typeof: враћа низ који указује на основни тип података (string, number, boolean, object, function, undefined, symbol, bigint). Не погодан за проверу припадности одређеној класи.Object.prototype.toString.call(): враћа прецизнији низ са типом објекта ("[object Array]","[object Date]", итд.).
Укупно гледано, instanceof је користан за проверу да ли објекат припада одређеној класи или њеном претку у хијерархији наслеђивања.