JavaScript有没有isAssignableFrom的方法?

在DOM环境中
Comment类型继承了Node类型

var comment = document.createComment("xx");
//在Java中这样子判断
//Node.class.isAssignableFrom(comment.getClass());

如何判断Comment和Node的继承关系呢?
有没有isAssignableFrom的类似这样的判断呢

利用JavaScript原型链的性质是否能实现类似的API呢

Node.isAssignableFrom(comment.constructor);
//Node.isAssignableFrom(Comment);

更新时间:2018年2月6日17:18:40

阅读 2k
1 个回答

class关键字构建的继承体系,用instanceof判断就可以了

class Animal{}
class Rabbit extends Animal{}
var rabbit = new Rabbit();
rabbit instanceof Rabbit; //true
rabbit instanceof Animal; //true

根据以上的情景,定义这个isAssignableFrom方法

Function.prototype.isAssignableFrom = function(f) {
    if(!(typeof f == "function")) {
        return false;
    }
    if(this == f) {
        return true;
    }
    var prototype = this.prototype;
    var p = f.prototype;
    while(p) {
        if(p == prototype) {
            return true;
        }
        p = p.__proto__;
    }
    return false;
}

结果

Animal.isAssignableFrom(Rabbit); //true
Text.isAssignableFrom(Comment); //false
Node.isAssignableFrom(Comment); //true

所以题目的描述是个误导,抱歉!!! 已更正

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题