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
为什么会有不同的结果
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这两个继承方式内在都是通过原型继承,结果也是一致的。
都是
trueprint(Student.isPrototypeOf(a));Student是构造函数,他不是a的原型,Student.prototype才是,所以自然是返回false。我觉得你给的例子很清晰,应该没啥奇怪的才对。
这语法好陌生