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:
true
false
true
对比原型式继承的方式
var o1 = {};
var o2 = Object.create(o1);
var o3 = Object.create(o2);
o2.isPrototypeOf(o3) // true
o1.isPrototypeOf(o3) // true
为什么会有不同的结果
这两个继承方式内在都是通过原型继承,结果也是一致的。
都是
true
print(Student.isPrototypeOf(a));
Student
是构造函数,他不是a
的原型,Student.prototype
才是,所以自然是返回false
。我觉得你给的例子很清晰,应该没啥奇怪的才对。