使用js自己实现一个inherit函数

在JavaScript中,你可以使用原型链或者ES6的class关键字来实现继承。但是,如果你想要自己实现一个inherit函数,那么原型链可能是最直接的方式。

以下是一个简单的inherit函数的实现,它接受两个参数:Super(父类)和Sub(子类)。这个函数会将子类的原型设置为父类的一个实例,从而实现继承:

function inherit(Super, Sub) {
    // 创建一个临时的构造函数,避免调用Super时执行了方法或者设置了属性
    function TemporaryConstructor() {}
    // 将临时构造函数的原型设置为Super的原型,这样TemporaryConstructor就继承了Super
    TemporaryConstructor.prototype = Super.prototype;
    // 将Sub的原型设置为TemporaryConstructor的一个新实例,这样Sub就继承了Super的原型链
    Sub.prototype = new TemporaryConstructor();
    // 修复Sub.prototype.constructor的指向,使其指向Sub本身
    Sub.prototype.constructor = Sub;
}

你可以像下面这样使用这个函数:

function Super() {
    this.superValue = 'I am from Super!';
}

Super.prototype.sayHello = function() {
    console.log('Hello from Super!');
};

function Sub() {
    this.subValue = 'I am from Sub!';
}

// 使用inherit函数实现继承
inherit(Super, Sub);

Sub.prototype.sayGoodbye = function() {
    console.log('Goodbye from Sub!');
};

var subInstance = new Sub();
subInstance.sayHello(); // 输出:Hello from Super!
subInstance.sayGoodbye(); // 输出:Goodbye from Sub!
console.log(subInstance.superValue); // 输出:I am from Super!
console.log(subInstance.subValue); // 输出:I am from Sub!

注意,这个简单的inherit函数并没有处理父类构造函数中的参数或者属性。如果你需要在子类中继承父类的属性,你可能需要在子类的构造函数中显式地调用父类的构造函数,并传递必要的参数。这可以通过使用Super.call(this, arguments...)或者Super.apply(this, arguments)来实现。

posted @   王铁柱6  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示