JS 中的类Public,Private 和 Protected详解

对于JS中的类的访问控制,我们可以使用Public、Private和Protected。

Public

Public成员是一些可以由任何方法和对象访问的属性和方法。在类中定义Public成员时,就像在全局函数和变量中那样,将函数或变量定义为类中的成员即可。

下面是一个简单的例子,其中定义了一个包含公共成员的车类:

class Car {
  constructor(make, model, year) {
    this.make = make; // 公共属性
    this.model = model; // 公共属性
    this.year = year; // 公共属性
  }
  getInfo() {
    return `${this.make} ${this.model} (${this.year})`; // 公共函数
  }
}

在上述示例中,构造函数constructor和函数getInfo()是公共成员。

公共成员是类的主要成员,并且它们不在一个单独的命名空间中隐藏。相反,它们在整个应用程序中可用于任何对象。公共成员对于保留类的状态是很重要的,通常它们用于提供存储单元或操作单元。

Private

私有成员只能在定义它们的类内部访问。私有成员必须使用私有字段或私有方法声明,并使用“#”作为前缀标识它们。

下面是一个简单的例子,其中定义了一个包含私有成员的车类:

class Car {
  constructor(make, model, year) {
    this.make = make; // 公共成员
    this.model = model; // 公共成员
    this.year = year; // 公共成员
    this.#VIN = Math.floor(Math.random() * 10000000); // 私有属性
  }
  #VIN; // 私有字段

  start() {
    this.#engineOn();
  }
  #engineOn() {
    console.log(`Engine of ${this.make} ${this.model} (${this.year}) is on!`); // 私有函数
  }
}

let myCar = new Car('Toyota', 'Camry', 2021);
myCar.start(); // Engine of Toyota Camry (2021) is on!
console.log(myCar.#VIN); // SyntaxError: Private field '#VIN' must be declared in an enclosing class

在上述示例中,我们定义了一个私有属性#VIN和一个私有方法#engineOn()。私有成员在创建它们的类之外是不可见的。

Protected

Protected成员在类内和子类中可见。Protected成员与Private成员非常相似,因为它们只能在类的内部和子类中使用。Protected成员要使用关键字protected来声明。

下面是一个简单的例子,其中定义了一个包含保护成员的车类:

class Car {
  constructor(make, model, year) {
    this.make = make; // 公共成员
    this.model = model; // 公共成员
    this.year = year; // 公共成员
    this.#VIN = Math.floor(Math.random() * 10000000); // 保护属性
  }
  #VIN; // 保护字段

  start() {
    this.#engineOn();
  }
  #engineOn() {
    console.log(`Engine of ${this.make} ${this.model} (${this.year}) is on!`); // 私有函数
  }
}

class SportsCar extends Car {
  constructor(make, model, year, topSpeed) {
    super(make, model, year);
    this.topSpeed = topSpeed; // 公共成员
  }
  getTopSpeed() {
    return `The top speed of ${this.make} ${this.model} (${this.year}) is ${this.topSpeed} mph.`;
  }
}

let mySportsCar = new SportsCar('Porsche', '911', 2021, 190);
mySportsCar.start(); // Engine of Porsche 911 (2021) is on!
console.log(mySportsCar.getTopSpeed()); // The top speed of Porsche 911 (2021) is 190 mph.
console.log(mySportsCar.#VIN); // SyntaxError: Private field '#VIN' must be declared in an enclosing class

在上述示例中,我们定义了一个保护属性#VIN,并在派生类SportsCar中添加了新的公共成员topSpeed和一个新的公共函数getTopSpeed()

派生类SportsCar可以访问基类Car中的保护成员#VIN,但不能直接从外部访问。同时,访问保护成员和私有成员的方式相似。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS 中的类Public,Private 和 Protected详解 - Python技术站

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

相关文章

  • Cookie的使用及保存中文并用Cookie实现购物车功能

    下面是关于Cookie的使用及保存中文并用Cookie实现购物车功能的完整攻略。 什么是Cookie? Cookie是在Web服务器端存储在用户计算机上的一小段文本文件,它是HTTP协议的一部分,用于告诉服务器哪些请求来自于同一用户。服务器使用Cookie来存储用户的信息,包括登录状态、用户偏好、购物车中选中的商品等等。 Cookie有一个名称、一个值和其他…

    JavaScript 2023年6月11日
    00
  • js 剪切板的用法(clipboardData.setData)与js match函数介绍

    下面开始介绍“js 剪切板的用法(clipboardData.setData)与js match函数介绍”: js 剪切板的用法(clipboardData.setData) 简介 剪切板(clipboard)是操作系统提供的一种机制,用于临时存储某个程序的数据,以供其他程序使用。在 web 应用中,也可以使用剪切板来实现数据的复制和粘贴。 在 JavaSc…

    JavaScript 2023年6月10日
    00
  • JavaScript DOM节点操作方式全面讲解

    JavaScript DOM节点操作是前端开发中非常重要的一部分,通过节点操作可以改变页面的结构、样式和内容。本文将全面讲解JavaScript DOM节点操作的方式,包括获取节点、修改节点的属性、添加节点、删除节点等。同时,本文还将通过两个实例对节点操作进行说明,帮助读者更好地理解。 获取节点 获取节点是在操作节点之前必须要进行的步骤。在JavaScrip…

    JavaScript 2023年6月10日
    00
  • 论坛转贴工具中用到的正则表达式学习正则的好例子

    让我来详细讲解一下“论坛转贴工具中用到的正则表达式学习正则的好例子”的完整攻略。 正则表达式简介 正则表达式(Regular Expression,简称RE)是一种用于匹配字符串中的模式的表达式,它具有简洁、灵活、功能强大等优点。在web开发中,我们经常会使用正则表达式来过滤、查询、替换字符串。因此,熟练掌握正则表达式是web开发工程师必不可少的技能之一。 …

    JavaScript 2023年6月10日
    00
  • JS原型对象操作实例分析

    JS原型对象是JS中非常重要的一个概念。它允许我们将一个或多个属性和方法赋值给一个函数,并允许其他对象通过继承这些属性和方法来共享它们。本文将从以下几个方面详细讲解JS原型对象的操作实例。 1. 什么是JS原型对象? JS原型对象是每个 JS 对象都具有的属性,它允许我们将对象的属性和方法共享到其他对象中。每个对象都有一个原型对象,并且它继承自其父对象的原型…

    JavaScript 2023年5月27日
    00
  • 浅谈Javascript中Object与Function对象

    JavaScript中的所有数据都是对象,包括Object对象和Function对象。但是Object与Function对象不同,Object对象主要用于存储数据,而Function对象主要用于封装一些代码,实现逻辑的封装与复用。 Object对象 在JavaScript中,Object对象是所有对象的基类,其它对象都继承了Object对象。Object对象…

    JavaScript 2023年5月27日
    00
  • Javascript Global unescape() 函数

    JavaScript Global对象中的unescape()函数用于将经过编码的字符串解码为原始字符串。该函数将所有的十六进制转义序列替换为相应的字符。以下是关于unescape()函数的完整攻略,包括两个示例。 JavaScript Global对象中的unescape()函数 JavaScript Global对象中的unescape()函数用于将经过…

    JavaScript 2023年5月11日
    00
  • js实现电子时钟功能

    下面我将为您详细讲解实现“js实现电子时钟功能”的完整攻略。在这个过程中,我们将会用到HTML、CSS和JavaScript三种语言。 HTML部分 首先,我们先编写一个基本的HTML页面,然后在页面中添加一个用于显示时间的DIV容器。HTML代码可以如下所示: <!DOCTYPE html> <html> <head> …

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