JS 中的类Public,Private 和 Protected详解

yizhihongxing

对于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中的普通函数和箭头函数的区别和用法详解

    介绍JavaScript中的普通函数和箭头函数的区别和用法,可以从以下几个方面进行详细的讲解: 普通函数和箭头函数的区别 语法结构 普通函数: function add(a, b) { return a + b; } 箭头函数: const add = (a, b) => { return a + b; } this指向 普通函数的this指向调用它的…

    JavaScript 2023年5月27日
    00
  • JavaScript Global 对象

    以下是关于JavaScript Global对象的完整攻略,包括两个示例说明。 JavaScript Global对象 JavaScript Global对象是一个全局对象,它包含了所有JavaScript程序都可以访问的属性和方法。在浏览器中,Global对象是window对象,而在Node.js中,Global对象是global对象。 下面是一些常用的J…

    JavaScript 2023年5月11日
    00
  • Javascript注入技巧

    Javascript注入技巧 Javascript注入是一种将代码注入到Web页面中的攻击技巧,它可以通过一些手段在Web页面中运行恶意代码。攻击者可以利用这种技术窃取用户的敏感信息、篡改页面内容、运行恶意程序等,对网站和用户造成不良影响。下面是一些Javascript注入的技巧和示例说明。 基础技巧 1. 隐藏字段注入 隐藏字段注入是一种简单的注入技巧,攻…

    JavaScript 2023年5月18日
    00
  • Ajax实现跨域访问的三种方法

    下面是详细的讲解: 什么是Ajax实现跨域访问? 在Web开发中,跨域指的是一个域下的文档或脚本试图去请求另一个域下的资源,这种跨域的请求是被浏览器所禁止的。而Ajax实现跨域访问则是指在异步请求数据时,可以在客户端直接向其他域名的服务器获取数据,从而避免了在服务端进行跨域操作的限制。 实现Ajax跨域访问的三种方法 1. 通过修改同源策略 同源策略指的是浏…

    JavaScript 2023年6月11日
    00
  • javaWeb使用验证码实现简单登录

    JavaWeb使用验证码实现简单登录 需求 在JavaWeb网站中,为登录页面增加验证码功能,防止恶意程序暴力破解密码,提高网站的安全性。 技术栈 前端:HTML、JavaScript 后端:Java、Servlet、JSP 实现步骤 1. 引入验证码jar包 可以使用第三方的验证码生成工具库,这里以Google的kaptcha为例。 在pom.xml文件中…

    JavaScript 2023年6月10日
    00
  • Javascript RegExp ignoreCase 属性

    JavaScript RegExp的ignoreCase属性 JavaScript的RegExp对象中的ignoreCase属性是一个布尔值,表示正则表达式是否具有忽略大小写标志i。当ignoreCase属性为true时,正则表达式将忽略匹配时的大小写。 语法 ignoreCase属性的语法如下: RegExp.ignoreCase 示例1:使用ignore…

    JavaScript 2023年5月11日
    00
  • 深入理解JavaScript程序中内存泄漏

    深入理解JavaScript程序中内存泄漏 什么是内存泄漏 内存泄漏是指程序中分配的内存空间无法被回收的现象,导致系统中存在大量无用的内存占用,最终会导致程序崩溃的现象。JavaScript程序中也可能出现内存泄漏,通常是由于程序中存在一些错误的代码,导致内存空间无法被垃圾回收机制正常回收而造成的。 如何避免内存泄漏 避免全局变量 JavaScript中的全…

    JavaScript 2023年6月10日
    00
  • 深入理解react-router 路由的实现原理

    下面是深入理解react-router路由的实现原理的攻略。 1. 路由的概念 路由是指通过URL来定位到特定的页面并展示给用户的过程。在前端 SPA(单页应用)中,我们通常使用第三方库来实现路由功能,其中react-router是使用较为广泛的一种。 2. react-router的实现原理 首先,我们需要了解react-router的实现原理是基于his…

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