确定JavaScript类是否扩展了另一个类

时间:2014-08-27 13:51:54

标签: javascript backbone.js

假设我在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

2 个答案:

答案 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的优点是您可以直接指定原型,而不是通过构造函数间接指定原型。