Javascript之面向对象–封装

Javascript之面向对象--封装

什么是封装

封装(Encapsulation)是面向对象编程的三大特性之一,它指的是将程序中的数据和方法包装在一起,形成一个类(Class),并且对外部隐藏这些实现的细节,只把公共的接口(接口就是能够被外部访问到的数据和方法)暴露出来,外部无法直接访问类内部的变量或函数。

封装能够提供以下优点:

  • 隐藏实现细节,保证数据的安全性;
  • 提高代码的可维护性,方便修改和拓展;
  • 简化编程,降低出错率。

Javascript中如何实现封装

在Javascript中,我们可以通过创建对象(Object)和类(Class)来实现封装。在对象的实现中,可以通过闭包(Closure)实现私有属性和方法的封装。在类的实现中,则可以通过ES6中的Class关键字来实现。

通过闭包实现封装

在Javascript中,闭包能够创建私有变量,而这些变量对于外部是不可见的,因此能够实现封装。一般情况下,我们用闭包来创建一个对象(Object),对象的属性和方法都在闭包里定义。

下面是一个例子:

function createPerson(name) {
  let age = 0; // 私有属性
  function getAge() { // 私有方法
    return age;
  }
  function setAge(newAge) { // 私有方法
    if (newAge >= 0 && newAge <= 120) {
      age = newAge;
    } else {
      throw new Error('年龄超出范围');
    }
  }
  return {
    getName() {
      return name;
    },
    getAge,
    setAge
  };
}

let person = createPerson('张三');
console.log(person.getName()); // 输出:张三
console.log(person.getAge()); // 输出:0
person.setAge(18);
console.log(person.getAge()); // 输出:18

在这个例子中,我们通过createPerson函数创建了一个包含私有属性和方法的对象。对象的外部只能通过公共接口getName、getAge和setAge来获取和修改数据,而不能直接访问age变量和getAge、setAge方法。

通过ES6的Class实现封装

在ES6中,我们可以使用Class关键字来声明一个类,类中包含了构造函数、属性和方法。

下面是一个例子:

class Person {
  #age = 0; // 私有属性
  // 构造函数
  constructor(name) {
    this.name = name; // 共有属性
  }
  // 公有方法
  getName() {
    return this.name;
  }
  // 私有方法
  #checkAge(newAge) {
    if (newAge >= 0 && newAge <= 120) {
      this.#age = newAge;
    } else {
      throw new Error('年龄超出范围');
    }
  }
  // 公有方法
  getAge() {
    return this.#age;
  }
  // 公有方法
  setAge(newAge) {
    this.#checkAge(newAge);
  }
}

let person = new Person('张三');
console.log(person.getName()); // 输出:张三
console.log(person.getAge()); // 输出:0
person.setAge(18);
console.log(person.getAge()); // 输出:18

在这个例子中,我们通过Class声明了一个Person类,类中包含了共有属性、私有属性、共有方法和私有方法,并且使用了ES6中的#符号来声明私有属性和方法。类的外部只能通过公共接口getName、getAge和setAge来获取和修改数据,而不能直接访问age变量和#checkAge方法。

总结

通过上面的例子,我们可以看到,通过封装,可以实现对数据和方法的保护,使程序更加安全和可维护。在Javascript中,我们可以通过闭包和Class来实现封装,它们都有各自的适用场景,需要根据实际情况选择使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript之面向对象–封装 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详解JavaScript如何优雅地实现创建多维数组

    JavaScript如何优雅地实现创建多维数组 在JavaScript中,创建多维数组可以使用嵌套的数组方式实现,但这种方式不够优雅,可以使用ES6的Array.from()方法和reduce()方法来实现创建多维数组。 使用Array.from()方法创建多维数组 Array.from()方法可以将一个类似数组或可迭代对象转化为一个真正的数组。这个方法接受…

    JavaScript 2023年5月27日
    00
  • js转html实体的方法

    js转html实体的方法一般用于将HTML代码中的实体字符(比如<,>,&等)转义为对应的实体字符,避免出现一些显示问题或者安全问题。下面是js转html实体的方法的攻略: 方法一:使用innerHTML属性 我们可以通过创建一个新的元素,设置其innerHTML属性,并获取innerHTML属性来将实体字符转化为 HTML 实体。示例如…

    JavaScript 2023年5月19日
    00
  • javascript 操作cookies详解及实例

    JavaScript操作Cookies详解及实例 在Web应用程序中,Cookie是一种最常用的技术,可用于识别用户并保存用户的状态信息。在这篇文章中,我们将重点讲解JavaScript如何操作Cookie。 什么是Cookie Cookie是一种保存在客户端计算机上的小型文本文件。Cookie由名称、值、过期时间、路径、域等多个属性组成。它们可以帮助我们识…

    JavaScript 2023年6月11日
    00
  • Javascript 编码约定(编码规范)

    为了让Javascript代码具备可读性以及易于维护,编写Javascript代码时需要遵循一定的编码约定,也被称为编码规范。接下来,本文将介绍Javascript编码规范的完整攻略。 确定代码的缩进方式 在编写Javascript代码时,我们需要使用缩进来表示不同代码块之间的层次结构,一般约定每个缩进级别使用2或4个空格。其中空格的数量应该保持统一,不要混…

    JavaScript 2023年5月19日
    00
  • javascript中利用柯里化函数实现bind方法

    利用柯里化函数实现bind方法 在 JavaScript 中,bind() 是一个用于改变函数 this 上下文的方法。它返回一个新函数,新函数的 this 指向 bind() 的第一个参数,并且在调用的时候可以传入多个参数传递给原函数。这个方法在函数式编程中非常有用,因为它允许我们更容易地组合函数。 柯里化函数可以用来实现 bind() 方法,让我们来看看…

    JavaScript 2023年6月10日
    00
  • Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    JQuery是一种JavaScript库,其中包括了许多有用的工具方法,其中包括四种数据请求方法:$.get(), $.post(), $.ajax(), $.getJSON()。以下是它们的详细讲解: $.get(url, data, success, dataType) url:请求的URL地址 data:发送给服务器的数据(可以省略) success:…

    JavaScript 2023年5月19日
    00
  • JS实现单例模式的6种方案汇总

    下面我就详细讲解一下“JS实现单例模式的6种方案汇总”的完整攻略。 什么是单例模式 单例模式是一种常用的设计模式,它可以确保一个类只有一个实例,并提供了一个全局访问点。这对于管理共享的资源非常有用,比如线程池、数据库连接池等。 为什么要使用单例模式 使用单例模式可以避免不必要的资源浪费,提高程序性能,并且可以确保全局的一致性。 6种方案汇总 1. 普通模式 …

    JavaScript 2023年6月10日
    00
  • JavaScript闭包和作用域链的定义实现

    JavaScript闭包和作用域链的定义实现 什么是闭包? 在JavaScript中,闭包是指每个函数在创建时会生成一个自己的执行环境,这个执行环境可以访问到它自身定义的变量、参数,也可以访问父级的变量,而且这个执行环境可以一直存在,即使函数执行完,此时这个执行环境也不会被销毁。 简单来说,就是可以访问父级作用域的函数,创建出来的执行环境,这种执行环境中包含…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部