Выдает ошибку, если значение JavaScript не относится к определенному «классу»? - PullRequest
1 голос
/ 04 февраля 2012

есть ли способ проверить тип объекта в javascript по отношению к пользовательскому типу?Я, вероятно, сформулировал это неправильно, поэтому позвольте мне показать вам, что я хочу сделать:

if(typeof value == "MyClassType")
     console.log(true);

Вы можете сделать это с помощью typeof, instanceof или чего-то подобного?Я хочу выдать ошибку, если пользователь указывает значение, которое не является ожидаемым.

Ответы [ 2 ]

3 голосов
/ 04 февраля 2012

Используйте оператор instanceof:

if (!(value instanceof MyClassType)) {
    throw new Error("expected object of type 'MyClassType'");
}

Документация: MSDN , MDN

1 голос
/ 04 февраля 2012

В javascript вас не должно волновать, относится ли объект к определенному типу. То, что вы должны заботиться о том, есть ли у вас методы, которые вы ожидаете. Фактически, все в порядке, чтобы предоставить любой объект, если у этого объекта есть соответствующие методы, которые реализуют ожидаемое поведение для этих методов. Это одна из красот javascript. Это не сложные типы и не должны быть. Черт возьми, посмотрите на модель JQuery. Они заставляют объект jQuery поддерживать методы массива, поэтому его можно использовать вместо массива в большинстве ситуаций, хотя технически это не просто массив.

Итак, я бы посоветовал вам протестировать объект, чтобы увидеть, видите ли вы несколько ожидаемых и необходимых методов на нем и если вы их найдете, тогда весело продолжите. Если вы не нашли нужные вам методы, выведите ошибку. Это сразу же улавливает общие проблемы неправильного использования, но не слишком ограничивает использование клиентом API.

Вы можете проверить существование метода / свойства, не более чем это:

if (obj.makeQuackSound && obj.flySouthForWinter) {
    // must be a duck
}

Если вы хотите проверить, являются ли они на самом деле функциями, а не просто свойствами, вы можете сделать это тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...