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())

 

posted @ 2020-12-22 01:02  ascertain  阅读(352)  评论(0)    收藏  举报