js中的类

news/2023/12/5 22:48:57

1、构造函数与类

class Person{// 构造函数// 构造函数在调用类,实例化对象时调用constructor(name,age){console.log('构造器被调用了!');console.log(name,age);// 在构造函数中,this表示当前所创建的对象// this.name对象的属性,name是传进来的参数this.name =name;this.age=age;}
}
const p1=new Person('lxl',23);
const p2=new Person('孙悟空',2000000003);
console.log(p1);
console.log(p2);

在这里插入图片描述

2、封装

  • 对象就是一个用来储存不同属相的容器

  • 对象不仅存储属性,还要负责数据的安全

  • 直接添加到对象中的属性,并不安全,因为它们可以被任意的修改?

  • 如何确保数据的安全:
    1.私有化数据:将需要保护的数据设置为私有,只能在类内部使用
    2.用setter和getter暴露数据

  • 封装主要来保证数据的安全

  • 实现封装的方法
    1.属性私有化,加 #
    2.通过set和get方法来操作数据
    get 属性名(){
    return this.#属性
    }
    set 属性名(参数){
    this.#属性=参数
    }

    调用:
    p1.属性名=‘lll’
    console.log(p1.属性名)

class Person {// 加 # 变成私有属性,只能在类的内部访问,例如sayHi方法里面的#address = '花果山';// 私有化的数据必须先声明#name;#age;#gender;constructor(name, age, gender) {this.#name = name;this.#age = age;this.#gender = gender;};sayHi() {return '你好!我是' + this.#name + ',地址:' + this.#address;}// 设置setter和getter暴露数据setName(name) {this.#name = name;}getName() {return this.#name;}set age(age) {this.#age = age;}get age() {return this.#age;}
}
const p1 = new Person('lxl', 23, '男');
console.log(p1);
console.log(p1.sayHi());
// console.log(p1.#address);

在这里插入图片描述

// 通过set和get方法修改和展示数据
p1.setName('lll');
console.log(p1.getName());//lll
// 类似是把age变成了一个属性
p1.age = 100
console.log(p1.age);//100	

3、多态

在JS中不会检查参数的类型,所以这就意味着任何数据都可以作为参数传递
要调用某个函数,无需指定的类型,只要对象满足某些条件即可。

class Dog{constructor(name){this.name = name;}
}
class Person{constructor(name){this.name = name;}
}
const p1=new Person('lxl');
const d1=new Dog('旺财');function sayHi(obj) {if (obj instanceof Person) {console.log('你好,我是'+obj.name);}else{console.log('请输入Person类');}   
}
sayHi(d1);
sayHi(p1);
sayHi(00);

在这里插入图片描述

4、继承

父类

class Animal{constructor(name){this.name = name;}say(){return '动物在叫!'}
}

子类

class Cat extends Animal{// 对父类的属性不满意,可以重写属性constructor(name,age){// 重写构造函数时,构造函数的第一行代码必须是super()super(name);//会自动调父类的构造器this.age = age;}// 如果对父类的say方法不满意,可以重写父类方法say(){// 调用一下父类的方法console.log(super.say());//在方法中可以使用super来引用父类的方法。return '🐱:喵喵!'}
}

测试用例

const c1=new Cat('小喵',90);
console.log(c1);
console.log(c1.say());

在这里插入图片描述

5、对象的结构

对象中存储属性的区域实际有两个:
1、对象自身

  • 直接通过对象所添加的属性,位于对象自身中
  • 在类中通过 x = y 的形式添加的属性,位于对象自身中

2、神秘位置:原型对象

  • 对象里还有一些其他内容,会存储到其他对象里(原型对象)
  • 在对象中会有一个属性用来存储原型对象,这个属性叫做__proto__。
  • 当我们访问对象中的属性时,会优先访问对象自身的属性,
    对象自身不包含该属性时,才会去原型对象中寻找
  • 会添加到原型对象中的情况:
    1. 在类中通过xxx(){}方式添加的方法,位于原型中
class Person {// 自身位置 a=bname = 'lxl';age = 23;constructor() {this.gender = 'male';}eat = function () {console.log('我在吃饭!');}// 神秘位置:sayHi() {console.log('你好,我是:' + this.name);}
}

测试用例:

const p = new Person();
p.address = '花果山'
console.log(p);
console.log(p.__proto__);
console.log(Person.prototype === p.__proto__);//true

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/76007.html

相关文章

软件设计和架构设计

软件设计和架构设计 1.软件设计 1.1设计 设计是从架构 构件 接口以及系统其他特征定义的过程。 软件设计的结果必须描述系统的架构,系统如何分解和组织构件。 描述构件间的接口。 描述构件必须详细到可进一步构造的程度。 设计是把分析模型转换成设计模型的过…

c++虚函数详解(多态特性)

1.c多态的概念 多态是c的特征之一 多态的分类:静态多态(静态联编)、动态多态(动态联编) 静态多态(静态联编):函数入口地址 是在 编译阶段 确定(运算符重载、函数重载&…

IOS新建应用

一:Application App。普通app。Document App。打开是记事本类似App。Game。新建游戏相关app。RealityKit为新建一个打开摄像机,一个Ar立方体的应用。 SenceKit为有一架飞机旋转的游戏App。 SpirteKit为一个手指头按上会出一个手指特效的应用。 Metal为一…

MySql常用命令总结

1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql> CREATE DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)…

抖音账号运营技巧,让你的短视频更火爆

抖音是目前最火爆的短视频平台之一,拥有着庞大的用户群体和广阔的市场前景。在这个平台上,每天都有大量的用户在发布自己的短视频内容,让自己的账号脱颖而出并吸引更多的粉丝,成为每个用户所追求的目标。下面就来介绍一些抖音账号…

应用程序和 API 攻击呈上升趋势

Akamai Technologies 发布了一份新的互联网现状报告,标题为“突破安全漏洞:针对组织的应用程序和 API 攻击的兴起”。 报告显示,亚太地区和日本(APJ)的金融服务业仍然是该地区受攻击最严重的行业,Web 应用…

mqtt服务管理配置

mqtt服务管理配置mosquitto.conf配置文件 windows查找占用端口 netstat -aon|findstr 1883 linux查找占用端口 netstat -antlp|grep “1883” 服务启动 mosquitto -c mosquitto.conf -v 指定端口启动 mosquitto -p 指定端口号码 添加用户 mosquitto_passwd -b “C:/Program Fi…

Docker介绍、常用命令、项目部署

什么是Docker 简单说:Docker就是一个虚拟机,专业说:它是一个开源的容器平台。它和我们常用的VMware有很多相似的地方。 名词解释 镜像/images 由本体打包出来的文件。并不是文件本身,但是具有该文件的功能。举个不太贴切的例子&…

基于Rancherwebhook微服务的弹性伸缩实现

一、引言 随着云计算技术的不断发展,弹性伸缩已成为云环境下实现高可用性、可扩展性、资源优化和负载均衡的重要手段。Rancherwebhook微服务是一种基于容器的云原生应用管理平台,提供了一种方便、快捷、高效的方式来管理容器编排和弹性伸缩。本文将介绍如…

LeetCode:29. 两数相除

29. 两数相除 1)题目2)思路3)代码1.初始代码2.第一次优化3.第二次优化 4)结果1.初始结果2.第一次优化结果3.第二次优化结果 1)题目 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,…

基于Freertos的ESP-IDF开发——7.WS2812B彩色灯循环

基于Freertos的ESP-IDF开发——7.WS2812B彩色灯循环 0. 前言1. WS2812B简介2. 完整代码3. 演示效果4. 其他FreeRtos文章 0. 前言 本节使用WS2812B实现彩灯循环 开发环境:ESP-IDF 4.3 操作系统:Windows10 专业版 开发板:自制的ESP32-WROOM-3…

Python关于Pandas的iterrows、itertuples等遍历表格时读取不到第一行的问题

一、问题原因 df.iterrows() 是用来遍历 Pandas DataFrame 的方法,它会把 DataFrame 中的每一行转换成一个元组,其中第一个元素是行号,第二个元素是该行的数据。行号从 0 开始。 在使用 df.iterrows() 遍历 DataFrame 的时候发现表格第二行…

CMD与DOS脚本编程【第六章】

预计更新 第一章. 简介和基础命令 1.1 介绍cmd/dos脚本语言的概念和基本语法 1.2 讲解常用的基础命令和参数,如echo、dir、cd等 第二章. 变量和运算符 2.1 讲解变量和常量的定义和使用方法 2.2 介绍不同类型的运算符和运算规则 第三章. 控制流程和条件语句 3.1 介…

组合数学第二讲

可以把取出来的数从小到大排序,第一个数不变,第二个数1,以此类推... 总共的情况为,数字取完后可再依次减回去,保证数在100以内 k-element multisets 引出下面的二项式系数 binomial coefficients(二项式系…

FAT NTFS Ext3文件系统有什么区别

10 年前 FAT 文件系统还是常见的格式,而现在 Windows 上主要是 NTFS,Linux 上主要是Ext3、Ext4 文件系统。关于这块知识,一般资料只会从支持的磁盘大小、数据保护、文件名等各种维度帮你比较,但是最本质的内容却被一笔带过。它们最…

Glob 文件匹配

前言 glob本质是Unix shell 风格的路径匹配规则。 该规则后续被其它语言支持。 ?:匹配一个任意字符 *:匹配任意个任意字符 [sequence]:匹配出现在sequence里面的一个字符 [!sequence]:匹配没有出现在sequence里面的一个字符 [a…

Spark大数据处理讲课笔记---Spark RDD典型案例

零、本节学习目标 利用RDD计算总分与平均分利用RDD统计每日新增用户利用RDD实现分组排行榜 一、利用RDD计算总分与平均分 (一)提出任务 针对成绩表,计算每个学生总分和平均分 (二)实现思路 读取成绩文件&#xff…

java实现url链接的补全,获取到的链接是以/或 ./ 开头的相对链接,不是以http开头的,需要补全

一、实现的目标 在使用爬虫获取网页html数据时,解析到的链接是/或./ 开头的相对链接,不是以http开头的链接,如:/picture/0/cca65350643c441e80d390ded3975db0.png 。此时需要完成对该链接的补全,以得到正确的链接。 二、实现思路 对比完整的url链接和相对链接,进行分析,…

自动化测试框架搭建步骤教程

说起自动化测试,我想大家都会有个疑问,要不要做自动化测试? 自动化测试给我们带来的收益是否会超出在建设时所投入的成本,这个嘛别说是我,即便是高手也很难回答,自动化测试的初衷是美好的,而测试…

WebLogic:如何查看补丁版本

可以使用 /weblogic/bea/OPatch/下的opatch命令: /opatch lsinventory 执行结果: VOlogiciEDSP-APP-D-269:/opatch lsinventory Oracle Interim Patch Installer version 13.9.4_2_8 Copyright (c) 2023, Oracle Corporation. All rights reserved. Orac…
最新文章