返回

JavaScript回顾之旅:深化基础,探索继承、闭包和单例模式

前端

巩固基础:继承的艺术

继承是面向对象编程中一项基本原则,它允许子类继承父类的属性和方法。JavaScript中的继承提供了多种方式,每种方式都各有优缺点。

原型链继承

原型链继承是JavaScript中最简单的继承方式。它通过将子类的原型指向父类实例来实现继承。

// 父类构造函数
function Parent(name) {
  this.name = name;
}

// 子类构造函数
function Child(name, age) {
  this.name = name;
  this.age = age;
}

// 设置子类的原型链为父类的实例
Child.prototype = new Parent();

构造函数继承

构造函数继承通过调用父类构造函数在子类构造函数内部实现继承。

// 父类构造函数
function Parent(name) {
  this.name = name;
}

// 子类构造函数
function Child(name, age) {
  Parent.call(this, name);
  this.age = age;
}

ES6 类继承

ES6引入了类,为JavaScript提供了更简洁、更现代的继承语法。

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

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

揭开闭包的神秘面纱

闭包是一种函数,它可以访问创建它的作用域中的变量,即使该作用域已经结束。闭包在JavaScript中非常强大,可以用于数据封装、模块化和事件处理。

// 创建一个闭包
function createCounter() {
  let count = 0;
  return function() {
    return count++;
  };
}

// 获取闭包
const counter = createCounter();

// 使用闭包
console.log(counter()); // 0
console.log(counter()); // 1

单例模式:确保唯一性

单例模式是一种设计模式,它确保一个类只有一个实例。这种模式在需要全局访问的组件或需要防止重复实例化的场景中非常有用。

// 创建一个单例类
class Singleton {
  static instance = null;

  constructor() {
    if (Singleton.instance) {
      return Singleton.instance;
    }

    Singleton.instance = this;
  }

  // 获取单例实例
  static getInstance() {
    return this.instance || new Singleton();
  }
}

总结

通过探索继承的多种方式、闭包和单例模式,我们巩固了JavaScript的基础,提升了我们的编程技能。这些概念是构建健壮、可扩展和维护性良好的JavaScript应用程序的基石。让我们继续在这个令人兴奋的编程世界中探索和学习!