当前位置:首页 > JavaScript

实现继承js

2026-01-15 15:25:04JavaScript

实现继承的方式

在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法:

原型链继承

原型链继承是最基本的继承方式,通过将子类的原型指向父类的实例来实现继承。

function Parent() {
    this.name = 'Parent';
}

Parent.prototype.sayName = function() {
    console.log(this.name);
};

function Child() {
    this.childName = 'Child';
}

Child.prototype = new Parent();
Child.prototype.constructor = Child;

const child = new Child();
child.sayName(); // 输出: Parent

构造函数继承

构造函数继承通过在子类的构造函数中调用父类的构造函数来实现继承。

function Parent(name) {
    this.name = name;
}

Parent.prototype.sayName = function() {
    console.log(this.name);
};

function Child(name, age) {
    Parent.call(this, name);
    this.age = age;
}

const child = new Child('Child', 10);
console.log(child.name); // 输出: Child
console.log(child.age); // 输出: 10

组合继承

组合继承结合了原型链继承和构造函数继承的优点,既继承了父类的属性,又继承了父类的方法。

function Parent(name) {
    this.name = name;
}

Parent.prototype.sayName = function() {
    console.log(this.name);
};

function Child(name, age) {
    Parent.call(this, name);
    this.age = age;
}

Child.prototype = new Parent();
Child.prototype.constructor = Child;

const child = new Child('Child', 10);
child.sayName(); // 输出: Child
console.log(child.age); // 输出: 10

原型式继承

原型式继承通过创建一个临时构造函数来实现继承,类似于Object.create()方法。

function createObject(obj) {
    function F() {}
    F.prototype = obj;
    return new F();
}

const parent = {
    name: 'Parent',
    sayName: function() {
        console.log(this.name);
    }
};

const child = createObject(parent);
child.name = 'Child';
child.sayName(); // 输出: Child

寄生式继承

寄生式继承在原型式继承的基础上增强了对象的功能。

function createEnhancedObject(obj) {
    const clone = Object.create(obj);
    clone.sayHello = function() {
        console.log('Hello');
    };
    return clone;
}

const parent = {
    name: 'Parent',
    sayName: function() {
        console.log(this.name);
    }
};

const child = createEnhancedObject(parent);
child.sayHello(); // 输出: Hello
child.sayName(); // 输出: Parent

寄生组合式继承

寄生组合式继承是目前最理想的继承方式,避免了组合继承中调用两次父类构造函数的问题。

function inheritPrototype(child, parent) {
    const prototype = Object.create(parent.prototype);
    prototype.constructor = child;
    child.prototype = prototype;
}

function Parent(name) {
    this.name = name;
}

Parent.prototype.sayName = function() {
    console.log(this.name);
};

function Child(name, age) {
    Parent.call(this, name);
    this.age = age;
}

inheritPrototype(Child, Parent);

const child = new Child('Child', 10);
child.sayName(); // 输出: Child
console.log(child.age); // 输出: 10

ES6中的类继承

ES6引入了class和extends关键字,使得继承更加简洁和直观。

实现继承js

class Parent {
    constructor(name) {
        this.name = name;
    }

    sayName() {
        console.log(this.name);
    }
}

class Child extends Parent {
    constructor(name, age) {
        super(name);
        this.age = age;
    }
}

const child = new Child('Child', 10);
child.sayName(); // 输出: Child
console.log(child.age); // 输出: 10

总结

JavaScript中实现继承的方式多种多样,从早期的原型链继承到现代的ES6类继承,每种方式都有其适用场景。选择哪种方式取决于具体的需求和项目环境。

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…