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 @   ascertain  阅读(338)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示