假设我在Backbone上有一个课程:
var MyModel = Backbone.Model.extend( {} );
使用instanceof运算符,我可以检查实例化对象是否扩展了一个对象:
var instModel = new MyModel();
instModel instanceof MyModel; // true
instModel instanceof Backbone.Model; // true
我希望能够在不实例化对象的情况下检查继承。在JavaScript或Backbone中是否有一种方法可以确定未实例化的类是否扩展了对象?时间:
MyModel instanceof Backbone.Model; // false
MyModel instanceof Function; // true
答案 0 :(得分:3)
您可以像这样使用instanceof:
MyModel.prototype instanceof Backbone.Model
这是有效的,因为虽然没有MyModel
的实例化实例,但你并不关心它,无论如何你关心它的原型链,所以你可以检查它的原型继承。
注意,这不适用于
的特定检查MyModel.prototype instanceof MyModel
根据您的使用情况,这可能会很好,但是您确实希望这样做,您有两种选择:
MyModel === MyModel && MyModel.prototype instanceof MyModel
// OR
Object.create(MyModel.prototype) instanceof MyModel
答案 1 :(得分:0)
你可以尝试
Backbone.Model.prototype.isPrototypeOf(MyModel)
我不熟悉Backbone的继承模型,但instanceof
会假设Backbone.Model
是一个经典的JavaScript构造函数,并使用其原型进行检查。 isPrototypeOf
的优点是您可以直接指定原型,而不是通过构造函数间接指定原型。