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日

相关文章

  • 基于js对象,操作属性、方法详解

    基于JS对象,操作属性、方法详解 什么是JS对象 JS对象是JS语言中最为核心的所有元素之一,用于封装各种数据类型和功能。 如何创建JS对象 在JS中,创建对象有两种方式: 使用对象字面量 通过使用对象字面量,可以创建一个空对象,并在对象字面量中定义对象属性和方法。 示例: let person = { name: ‘Alice’, age: 22, say…

    JavaScript 2023年5月27日
    00
  • JavaScript arguments.callee作用及替换方案详解

    JavaScript arguments.callee作用及替换方案详解 引言 在 JavaScript 中,我们经常会用到函数的 arguments 对象。使用 arguments 可以获取函数调用时传入的所有参数,而 arguments.callee 是 arguments 对象的一个属性,它引用当前函数本身。 在 ES5 中,arguments.cal…

    JavaScript 2023年6月10日
    00
  • jquery根据锚点offset值实现动画切换

    想要实现根据锚点offset值实现动画切换的效果,需要经过以下步骤: 1. 监测锚点的click事件 首先,我们需要为锚点(a标签)添加click事件的监听。当用户点击锚点时,我们可以获取到被点击锚点的href属性值,即所要跳转到的锚点的标识符,例如#section1。 示例代码: $(document).on(‘click’, ‘a’, function …

    JavaScript 2023年6月10日
    00
  • JSON 教程 json入门学习笔记

    JSON 教程 json入门学习笔记 什么是JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript的语法,但与之相比,JSON更简洁、更易于理解,且可用于多种编程语言之间的数据传输。 JSON的语法规则 对象 在JSON 中,对象以“{}”表示,两个花括号之间是一组属性-值对,属性名…

    JavaScript 2023年5月27日
    00
  • DOM节点的替换或修改函数replaceChild()用法实例

    DOM(Document Object Model)是指文档对象模型,它是浏览器中的一种编程接口,允许开发者通过JavaScript来操作HTML文档的每个元素。在DOM中,节点是文档的基础单位。其中replaceChild()函数就是DOM节点的替换或修改函数,我们来详细讲解一下它的用法实例。 什么是replaceChild()函数? replaceChi…

    JavaScript 2023年6月10日
    00
  • JavaScript监听一个DOM元素大小变化

    要监听一个DOM元素大小的变化,我们可以利用JavaScript提供的IntersectionObserver API来实现。IntersectionObserver设计的初衷是为了监听页面中一个元素是否进入了视窗,但它也可以用于监听元素的大小变化。 以下是监听DOM元素大小变化的详细攻略: 步骤一:创建一个IntersectionObserver实例 首先…

    JavaScript 2023年6月10日
    00
  • JAVA Iterator 转成 List 的操作

    当需要将Iterator转成List时,可以使用Java中的Collections工具类中提供的addAll()方法将Iterator中的元素逐个添加到List中。下面提供具体的操作步骤和示例说明: 1. 创建Iterator对象 首先创建一个Iterator对象,例如: Iterator<String> it = list.iterator()…

    JavaScript 2023年5月28日
    00
  • js实现左右两侧浮动广告

    下面是关于“js实现左右两侧浮动广告”的完整攻略。 实现思路 我们首先需要确定广告层的定位方式,一般采用 position: fixed 来实现固定的效果。然后利用 JS 计算浏览器窗口的宽度,以及广告层的宽度,计算出广告层到浏览器窗口两侧的距离,以此确定广告层的位置。接着,我们需要监听浏览器窗口的 scroll 和 resize 事件,根据滚动的位置和窗口…

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