鍍金池/ 問答/Java  測試  HTML/ JavaScript有沒有isAssignableFrom的方法?

JavaScript有沒有isAssignableFrom的方法?

在DOM環(huán)境中
Comment類型繼承了Node類型

var comment = document.createComment("xx");
//在Java中這樣子判斷
//Node.class.isAssignableFrom(comment.getClass());

如何判斷Comment和Node的繼承關(guān)系呢?
有沒有isAssignableFrom的類似這樣的判斷呢

利用JavaScript原型鏈的性質(zhì)是否能實現(xiàn)類似的API呢

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

更新時間:2018年2月6日17:18:40

回答
編輯回答
祉小皓

class關(guān)鍵字構(gòu)建的繼承體系,用instanceof判斷就可以了

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

根據(jù)以上的情景,定義這個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;
}

結(jié)果

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

所以題目的描述是個誤導(dǎo),抱歉?。?! 已更正

2017年10月1日 15:47