javascript 面向对象编程基础:封装

yizhihongxing

面向对象编程 (Object-Oriented Programming,OOP) 是一种编程范式,它将数据和操作数据的方法封装起来,以对象的形式呈现出来,以此来实现代码重用。其中,封装就是OOP中的三大特性之一。

封装(Encapsulation),顾名思义就是封住某些操作,不让外界直接访问内部的数据,只允许一些公共的接口对数据进行访问和操作,从而达到保护数据的目的。常见的封装方式就是利用构造函数、ES5 中的 Object.defineProperty、ES6 中的 class 等方式定义类,并利用各种访问修饰符(public、private、protected 等)来控制成员的访问权限。

在 JavaScript 中,对象通过在构造函数中定义属性和方法,可以轻松地实现封装。下面是一个简单的封装示例:

function Person(name, age) {
  this.name = name;
  var _age = age;

  this.sayHi = function() {
    console.log(`Hi, my name is ${this.name}, I'm ${_age} years old.`);
  };

  this.getAge = function() {
    return _age;
  };

  this.setAge = function(age) {
    if (age >= 0 && age <= 120) {
      _age = age;
    } else {
      console.log('Invalid age value.');
    }
  };
}

var Jack = new Person('Jack', 25);

console.log(Jack.name); // Jack
Jack.sayHi(); // Hi, my name is Jack, I'm 25 years old.
console.log(Jack.getAge()); // 25
Jack.setAge(30);
console.log(Jack.getAge()); // 30
Jack.setAge(-10); // Invalid age value.
console.log(Jack.getAge()); // 30

在上面的示例中,我们定义了一个 Person 的类,类中包含了一个公共的 name 属性,和一个私有的 _age 属性,以及公共的 sayHi 方法和 getAge/setAge 方法。其中,_age 属性被封装在类的构造函数内部,外部无法直接访问,只能通过类提供的公共接口(即 getAge 和 setAge 方法)来操作。

另一个示例是利用 ES6 中的 class 关键字来实现封装:

class Person {
  constructor(name, age) {
    this.name = name;
    var _age = age;

    this.sayHi = function() {
      console.log(`Hi, my name is ${this.name}, I'm ${_age} years old.`);
    };
  }

  get age() {
    return this._age;
  }

  set age(value) {
    if (value >= 0 && value <= 120) {
      this._age = value;
    } else {
      console.log('Invalid age value.');
    }
  }
}

var Jack = new Person('Jack', 25);

console.log(Jack.name); // Jack
Jack.sayHi(); // Hi, my name is Jack, I'm 25 years old.
console.log(Jack.age); // undefined
Jack.age = 30;
console.log(Jack.age); // 30
Jack.age = -10; // Invalid age value.
console.log(Jack.age); // 30

在上面的示例中,我们同样定义了一个 Person 的类,通过利用 get 和 set 关键字,将私有的 _age 属性暴露成了公共的 age 属性。其中,set 方法通过限制输入值的范围来模拟了私有属性的访问控制。这种方式相较于第一种方式更加简洁,而且语法也更清晰。

总之,对象的封装是面向对象编程必不可少的一部分,它可以保护内部数据的安全,避免外部对数据的直接操作和篡改。同时,良好的封装还可以使代码的重构和维护更加方便,提高了代码的可维护性。

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

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

相关文章

  • Document 对象的常用方法

    下面是关于 Document 对象的常用方法的详细讲解: Document 对象 Document 对象表示当前页面的文档。它是 window 对象的一个属性。可以通过 window.document 或者 document 来访问这个对象。 常用方法 以下是常用的 Document 对象方法: 1. getElementById 方法名:getElemen…

    JavaScript 2023年6月10日
    00
  • JS实现的3des+base64加密解密算法完整示例

    JS实现的3DES+Base64加密解密算法完整示例 简介 本文介绍了如何使用JavaScript实现一种加密算法——3DES+Base64,包含完整的示例代码。具体而言,我们将使用3DES算法对明文进行加密,并将加密后的结果使用Base64算法编码,以便于传输。同时,我们也将演示如何使用3DES算法进行解密,以还原出原始的明文。 算法介绍 3DES算法 3…

    JavaScript 2023年5月19日
    00
  • Javascript Date toString() 方法

    以下是关于JavaScript Date对象的toString()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的toString()方法 JavaScript的toString()方法返回一个表示日期时间部分的字符串,该字符串格式根据国际标准时间(UTC)而定。该方法不接受任何参数。 下面是使用对象的toString()方法的示例:…

    JavaScript 2023年5月11日
    00
  • javascript最基本的函数汇总

    本文将分享JavaScript最基本的函数汇总,包含函数的定义、调用和返回值等内容。 函数的定义 JavaScript中定义函数非常简单,使用function关键字,并指定函数名、参数列表和函数体。 示例代码: function sayHello(name) { console.log("Hello, " + name); } 上述代码定…

    JavaScript 2023年5月18日
    00
  • 深入理解JavaScript中的Base64编码字符串

    深入理解JavaScript中的Base64编码字符串 什么是Base64编码字符串? Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式,其常用于在网络上传输数据,例如将图片或音频文件转换为Base64编码字符串,然后将其作为字符串传输。 Base64编码将每3个字节转换为4个ASCII字符,字节不足时会进行填充。Base64编码表中包…

    JavaScript 2023年5月19日
    00
  • 当前流行的JavaScript代码风格指南

    当前流行的 JavaScript 代码风格指南 在 JavaScript 社区中,有很多流行的代码风格指南,比如 Airbnb JavaScript 代码风格指南,Google JavaScript 代码风格指南等。这些指南都提供了详细的代码规范和最佳实践,帮助开发者保证代码的质量和可读性。以下是一个完整的攻略。 1. 注释和命名规范 良好的注释和命名规范可…

    JavaScript 2023年5月19日
    00
  • 《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型

    《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型 引用类型 在 ECMAScript 中,引用类型指的是一种数据类型,这种数据类型是由多个不同的属性组成的对象。 Object 类型 Object 类型是 ECMAScript 中最基本的数据类型,也可以称之为引用类型的总称。对象是由键值对组成的无序集合。 创建一个 Obje…

    JavaScript 2023年5月27日
    00
  • JavaScript闭包的简单应用

    当我们使用JavaScript编写程序时,很多时候会涉及到闭包(closure)的使用。闭包是指函数能够访问和使用在其定义域外部的变量。在本文中,我们将探讨什么是闭包以及如何在JavaScript中使用它们。 什么是闭包? 闭包是一个函数,它可以访问和使用在其定义的外部作用域之外的变量。这些变量通常保存在闭包所在的函数的作用域中。 当一个函数被定义时,它会创…

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