isPrototypeOf的问题

const print = require('./print.js');class Student {    constructor(name) {        this.name = name;
    }

    hello() {
        alert('Hello, ' + this.name + '!');
    }
}class PrimaryStudent extends Student {    constructor(name, grade) {        super(name); // 记得用super调用父类的构造方法!
        this.grade = grade;
    }

    myGrade() {
        print('I am at grade ' + this.grade);
    }
}let a = new PrimaryStudent({    name: 'tst',    grade: 100})

print(Student.prototype.isPrototypeOf(a));
print(Student.isPrototypeOf(a));
print(a instanceof Student);

res:

truefalsetrue

对比原型式继承的方式

var o1 = {};
var o2 = Object.create(o1);
var o3 = Object.create(o2);o2.isPrototypeOf(o3) // trueo1.isPrototypeOf(o3) // true

为什么会有不同的结果


皈依舞
浏览 471回答 1
1回答

米脂

这两个继承方式内在都是通过原型继承,结果也是一致的。print(Student.prototype.isPrototypeOf(a));print(PrimaryStudent.prototype.isPrototypeOf(a));都是trueprint(Student.isPrototypeOf(a));Student是构造函数,他不是a的原型,Student.prototype才是,所以自然是返回false。我觉得你给的例子很清晰,应该没啥奇怪的才对。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript