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日

相关文章

  • JavaScript中的偏函数你理解了吗

    首先,偏函数涉及的概念有: 函数的柯里化:将接受多个参数的函数转化为接受单一参数(最初函数的第一个参数)的函数。例如,一个函数add(x,y,z),柯里化后可得到add(x)(y)(z)的格式。 偏函数:将某个函数的一部分参数固定下来,生成一个新的函数,该新函数的参数比原函数少。 在 JavaScript 中,利用柯里化的思想可以轻松实现偏函数。 下面是关于…

    JavaScript 2023年5月27日
    00
  • js 自带的sort() 方法全面了解

    JS自带的sort()方法全面了解 在JS中,sort()方法是对数组元素进行排序的内置方法。它可以帮助我们轻松地将数组按照一定的顺序进行排序。在这里,我们将详细讲解sort()方法的使用,包括语法、参数、返回值、排序顺序等。 语法 sort()方法的基本语法如下: array.sort(compareFunction); 其中,array 表示要排序的数组…

    JavaScript 2023年5月19日
    00
  • Javarscript中模块(module)、加载(load)与捆绑(bundle)详解

    Javascript中模块(module)、加载(load)与捆绑(bundle)详解 Javascript的模块化开发在现代Web开发中已经成为了标准配置。在Javascript的模块化开发中,常见的术语包括模块、加载和捆绑。 模块(Module) 模块是Javascript中包含一组功能的单独文件或代码块。每个模块都拥有自己的作用域,并且只对外暴露为公共…

    JavaScript 2023年5月27日
    00
  • jquery遍历数组与筛选数组的方法

    下面是关于jQuery遍历和筛选数组的方法的详细讲解: 遍历数组 1. each方法 使用each方法遍历数组很简单,只需要将数组作为each方法的参数,然后在回调函数中操作即可。回调函数中可以接收两个参数:元素的索引和元素本身。以下是一个例子: var arr = [‘apple’, ‘banana’, ‘orange’]; $.each(arr, fun…

    JavaScript 2023年5月27日
    00
  • JS中令人发指的valueOf方法介绍

    下面是详细讲解 “JS中令人发指的valueOf方法介绍”的完整攻略。 什么是valueOf方法? 在Javascript中,每个对象都具有一个valueOf()方法。这个方法返回对象的原始值。当我们需要将对象转换为原始值时,Javascript会自动调用这个方法。 valueOf的使用方法 valueOf方法使用非常简单。我们只需要调用对象上的这个方法就可…

    JavaScript 2023年5月27日
    00
  • 简介JavaScript中search()方法的使用

    当我们需要在一个字符串中查找一个子字符串时,可以使用JavaScript中的search()方法。这个方法返回的是被查找子字符串的下标位置。接下来,我将详细讲解它的用法。 语法 string.search(searchvalue) searchvalue可以是一个字符串或一个正则表达式。 参数 searchvalue: 要查找的子字符串或正则表达式。如果是字…

    JavaScript 2023年6月10日
    00
  • C#基于正则去掉注释的方法示例

    下面来详细讲解“C#基于正则去掉注释的方法示例”的完整攻略。 步骤一:了解正则表达式 在进行注释去除的过程中,我们需要使用正则表达式来匹配注释并去除。因此,我们需要对正则表达式有一定的了解。 正则表达式是一种模式匹配工具,可以用来识别字符串中的特定模式,比如数字、单词、邮箱等等,具有非常强大的匹配能力。在C#中,我们可以通过System.Text.Regul…

    JavaScript 2023年6月10日
    00
  • js 利用className得到对象的实现代码

    要使用 JavaScript 利用 className 得到对象,可以使用以下步骤: 获取对象:可以使用 document 对象中的 getElementById 或 getElementsByTagName 方法来捕捉需要获取的对象。如下所示: var obj = document.getElementById(‘myId’); var objList =…

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