JavaScript inherit 类的继承
class Serialization {
constructor() {
console.log('Serialization constructor~~~~~~~');
if (typeof (this.serialize) != 'function') {
throw new ReferenceError('should define serilize');
}
}
}
class Point extends Serialization {
constructor(x, y) {
super();
console.log('Point constructor ~~~~~~~~~~~~~~');
this.x = x;
this.y = y;
// this.serialize = () => {
// return `<Point $$ (${this.x}:${this.y})>`
// }
}
serialize(){
return `<Point (${this.x}:${this.y})>`;
}
}
class Point3D extends Point {
constructor(x, y, z) {
super(x, y);
this.z = z;
}
}
// s=new Serialization()
p = new Point(44, 88)
console.log(typeof p.serialize == 'function')
class A extends Object { };
console.log(A)
const B = class extends A {
constructor() {
super();
console.log('B constructor')
}
}
console.log(B)
b = new B()
console.log(b)
// const x = function (sup) {
// return class extends sup {
// constructor() {
// super();
// console.log('sub_sup constructor')
// }
// }
// }
// const x = (sup) => {
// return class extends sup {
// constructor() {
// super();
// console.log('sub_sup constructor')
// }
// }
// }
const x = sup => class extends sup {
constructor() {
super();
console.log('sub_sup contructor');
}
}
xx = x(B)
console.log(1111111,xx)
z = new xx()
console.log(z)
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
console.log('Point construct')
}
serialize(){
return `<Point (${this.x}:${this.y})>`
}
}
const Serialization = Super => class extends Super {
constructor(... args) {
super(...args);
console.log('Serialization construct');
if(typeof this.serialize != 'function')
throw new ReferenceError('should define serialize')
}
}
class Point3D extends Serialization(Point){
constructor(x,y,z){
super(x,y);
this.z=z;
}
serialize(){
return `<Point3D (${this.x}:${this.y}:${this.z})>`
}
}
p=new Point3D(2,3,8)
console.log(p)
console.log(p.serialize())