js中的类

news/2024/10/22 13:17:28/

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 由本体打包出来的文件。并不是文件本身,但是具有该文件的功能。举个不太贴切的例子&…