class P {
constructor(a) {
this.a = a
}
fn1() {
console.log(111)
}
}
let p = new P('111')
console.log('P实例', p)
class S extends P {
constructor(a, b) {
super(a)
this.b = b
}
fn2() {
console.log(222)
}
static fn4() {
console.log(444)
}
}
let s = new S(111, 222)
console.log('S实例', s)
console.log('s原型链上级', s.__proto__)
console.dir(S)
s.fn1()
console.log('S实例的原型链上级是否是P实例', s.__proto__.__proto__.constructor === P)
function T(a) {
this.a = a
}
T.prototype.fn3 = function () {
console.log(333)
}
let t = new T(111)
console.log('T实例', t)
console.log('T的原型的构造函数是Object吗', T.prototype.__proto__.constructor === Object)
console.log('T的原型的原型是什么', T.prototype.__proto__)
console.log('函数的原型是Object实例吗', T.__proto__.__proto__.constructor === Object)
class TT extends T {
constructor(a, b) {
super(a)
this.b = b
}
}
let tt = new TT(1, 2)
console.log('TT实例', tt)
console