Ответ 1
Как насчет использования instanceof
:
console.log(yourObject instanceof Backbone.Model);
Оператор instanceof проверяет, имеет ли объект в своем прототипе связать свойство прототипа конструктора.
Как часть моих модульных тестов (используя QUnit) для базового проекта, я тестирую некоторые функции управления коллекцией, которые возвращают массивы базовых моделей.
Есть ли способ непосредственно протестировать (для здравого смысла), будут ли объекты в моем массиве расширять Backbone.Model или мне просто делать проверку типа утки (и если да, то как и по каким уникальным атрибутам, например)
Поскольку в javascript нет реальной конструкции класса, typeof
, очевидно, не будет делать трюк здесь.
Я мог видеть, что это полезно в других тестах по дороге для моих коллекций или для проверки того, что вещи являются экземплярами моих конкретных классов Backbone и т.д.
Как насчет использования instanceof
:
console.log(yourObject instanceof Backbone.Model);
Оператор instanceof проверяет, имеет ли объект в своем прототипе связать свойство прототипа конструктора.
Проверка на тип объекта - это запах кода на таких языках, как JavaScript.
Если вам нужно знать, что ваша коллекция возвращает конкретную модель при вызове определенного метода, заполните коллекцию известными моделями и сравните их с этими моделями.
MyModel = Backbone.Model.extend({});
MyCollection = Backbone.Collection.extend({
model: MyModel,
getThatOne: function(){
return this.at[0];
}
});
m1 = new MyModel();
m2 = new MyModel();
col = new MyCollection([m1, m2]);
retrieved = col.getThatOne();
retrieved === m1 //=> true