Каков оператор instanceof в JavaScript?

instanceof ключевое слово в JavaScript может довольно сбивать с толку, когда с этим сначала встречаются, поскольку люди склонны думать, что JavaScript не является языком объектно-ориентированного программирования.

  • Что это?
  • Какие проблемы это решает?
  • Когда это является соответствующим и если не?
303
задан Alon Gubkin 10 April 2012 в 09:46
поделиться

2 ответа

instanceof

Операнд левой стороны (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 .

По запросу OP

я добавил небольшой пример с примерами кода и пояснениями.

Когда вы объявляете переменную, вы присваиваете ей определенный тип.

Например:

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.

Это действительно так просто!

268
ответ дан 23 November 2019 в 01:23
поделиться
//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);
3
ответ дан 23 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: