使用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)
来实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!