instanceof
ключевое слово в JavaScript может довольно сбивать с толку, когда с этим сначала встречаются, поскольку люди склонны думать, что JavaScript не является языком объектно-ориентированного программирования.
Операнд левой стороны (LHS) - это фактический объект, проверяемый для операнда правой стороны (RHS), который является фактическим конструктором класса.Основное определение:
Checks the current object and returns true if the object
is of the specified object type.
Вот несколько хороших примеров и пример, взятый непосредственно с сайта разработчиков Mozilla :
var color1 = new String("green");
color1 instanceof String; // returns true
var color2 = "coral"; //no type specified
color2 instanceof String; // returns false (color2 is not a String object)
Стоит упомянуть instanceof
принимает значение true, если объект наследуется от прототипа класса:
var p = new Person("Jon");
p instanceof Person
То есть p instanceof Person
истинно, поскольку p
наследуется от Person.prototype
.
я добавил небольшой пример с примерами кода и пояснениями.
Когда вы объявляете переменную, вы присваиваете ей определенный тип.
Например:
int i;
float f;
Customer c;
Выше показаны некоторые переменные, а именно i
, f
и c
. Типы - это целое число
, с плавающей запятой
и определенный пользователем тип данных Клиент
. Типы, подобные приведенным выше, могут быть для любого языка, а не только для JavaScript. Однако в JavaScript, когда вы объявляете переменную, вы явно не определяете тип, var x
, x может быть числом / строкой / типом данных, определяемым пользователем. Итак, что делает instanceof
, он проверяет объект на предмет того, относится ли он к указанному выше типу, взяв объект Customer
, который мы могли бы сделать:
var c = new Customer();
c instanceof Customer; //Returns true as c is just a customer
c instanceof String; //Returns false as c is not a string, it's a customer silly!
Выше мы видели, что c
был объявлен с типом Customer
. Мы обновили его и проверили, относится ли он к типу Customer
или нет. Конечно, он возвращает истину. Затем, все еще используя объект Customer
, мы проверяем, является ли он String
.Нет, определенно не для String
, мы добавили объект Customer
, а не объект String
. В этом случае возвращается false.
Это действительно так просто!
//Vehicle is a function. But by naming conventions
//(first letter is uppercase), it is also an object
//constructor function ("class").
function Vehicle(numWheels) {
this.numWheels = numWheels;
}
//We can create new instances and check their types.
myRoadster = new Vehicle(4);
alert(myRoadster instanceof Vehicle);