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为什么会有不同的结果
1 回答

米脂
TA贡献1836条经验 获得超3个赞
这两个继承方式内在都是通过原型继承,结果也是一致的。
print(Student.prototype.isPrototypeOf(a));print(PrimaryStudent.prototype.isPrototypeOf(a));
都是true
print(Student.isPrototypeOf(a));
Student
是构造函数,他不是a
的原型,Student.prototype
才是,所以自然是返回false
。
我觉得你给的例子很清晰,应该没啥奇怪的才对。
添加回答
举报
0/150
提交
取消