使用Resig的简单javascript继承确定函数是否扩展了另一个函数

时间:2014-02-06 22:45:49

标签: javascript inheritance

我正在使用John Resig的简单javascript inheritance code来构建和扩展类。我有一些类似他的例子:

var Person = Class.extend({
  init: function(isDancing){
    this.dancing = isDancing;
  },
  dance: function(){
    return this.dancing;
  }
});

var Ninja = Person.extend({
  init: function(){
    this._super( false );
  },
  dance: function(){
    // Call the inherited version of dance()
    return this._super();
  },
  swingSword: function(){
    return true;
  }
});

我想要一个可以传递变量的函数,如果变量是一个继承自Person的类,它将返回true,如果不是,则返回false。

通过“继承自Person”我的意思是它是通过调用Person的.extend()函数或从Person继承的类来创建的。

如果我有一个类的实例,我可以使用instanceof来确定该类是否继承自Person。有没有办法在没有创建实例的情况下

谢谢!

2 个答案:

答案 0 :(得分:1)

查看代码,看起来原型对象设置为父“class”的实例:

// Instantiate a base class (but only create the instance,
// don't run the init constructor)
var prototype = new this();

// [...]

Class.prototype = prototype;

所以你可以这样做:

Ninja.prototype instanceof Person

DEMO

答案 1 :(得分:1)

您可以简单地将instanceof operator与类的原型一起使用:

function isPersonSubclass(cls) {
    return typeof cls == "function" && cls.prototype instanceof Person;
}

isPersonSubclass(Ninja) // true