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

sta*_*lee 3 javascript backbone.js

假设我在 Backbone 上了一堂课:

var MyModel = Backbone.Model.extend( {} ); 
Run Code Online (Sandbox Code Playgroud)

使用 instanceof 运算符,我可以检查实例化对象是否扩展了对象:

var instModel = new MyModel();
instModel instanceof MyModel; // true
instModel instanceof Backbone.Model; // true
Run Code Online (Sandbox Code Playgroud)

我希望能够在不实例化对象的情况下检查继承。JavaScript 或 Backbone 中是否有方法来确定未实例化的类是否扩展了对象?自从:

 MyModel instanceof Backbone.Model; // false
 MyModel instanceof Function; // true
Run Code Online (Sandbox Code Playgroud)

log*_*yth 5

你可以像这样使用instanceof:

MyModel.prototype instanceof Backbone.Model
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为虽然没有 的实例化实例MyModel,但您并不真正关心它,无论如何您关心它的原型链,因此您可以只检查它的原型继承。

请注意,这不适用于特定检查

MyModel.prototype instanceof MyModel
Run Code Online (Sandbox Code Playgroud)

根据您的用例,这可能没问题,但如果您确实希望它起作用,您有两种选择:

MyModel === MyModel && MyModel.prototype instanceof MyModel

// OR

Object.create(MyModel.prototype) instanceof MyModel
Run Code Online (Sandbox Code Playgroud)