Javascript 有没有办法测试一个对象是否;是一个;主干。我的单元测试中的模型?

Javascript 有没有办法测试一个对象是否;是一个;主干。我的单元测试中的模型?,javascript,backbone.js,Javascript,Backbone.js,作为主干项目单元测试(使用QUnit)的一部分,我测试了一些返回主干模型数组的集合操作函数 有没有一种方法可以直接测试(为了理智起见)数组中的对象是否扩展了主干.Model,或者我应该只做一个duck类型检查(如果是的话,如何以及在哪个惟一属性上,例如) 由于javascript中没有真正的“类”结构,typeof显然无法实现这一点 我可以看到这在我的收藏的其他测试中很有用,或者检查东西是否是我特定主干类的实例,等等。使用: instanceof操作符测试对象在其原型中是否有 链接构造函数的原型

作为主干项目单元测试(使用QUnit)的一部分,我测试了一些返回主干模型数组的集合操作函数

有没有一种方法可以直接测试(为了理智起见)数组中的对象是否扩展了主干.Model,或者我应该只做一个duck类型检查(如果是的话,如何以及在哪个惟一属性上,例如)

由于javascript中没有真正的“类”结构,
typeof
显然无法实现这一点

我可以看到这在我的收藏的其他测试中很有用,或者检查东西是否是我特定主干类的实例,等等。

使用:

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

谢谢你的回复,德里克!你关于洛杉矶技术人员的文章真的很有帮助。我意识到类型检查在任何动态语言中都是令人讨厌的,但我在编写测试时偶尔会出现一个例外,但我想我可能也应该尽可能避免它。
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