首页 > 编程语言 >JavaScript学习笔记—面向对象

JavaScript学习笔记—面向对象

时间:2023-01-17 23:13:07浏览次数:42  
标签:name Person 对象 age JavaScript 笔记 面向对象 class 属性

1. 类的简介

  • 类是对象的模板,可以将对象中的属性和方法直接定义在类中,定义后,就可以直接通过类来创建对象。
  • 通过同一个类创建的对象,成为同类对象
    • 可以用instanceof来检查一个对象是否由某个类创建
    • 如果某个对象是由某个类所创建,则我们称该对象是这个类的实例
  • 语法:
class 类名 {} // 类名使用大驼峰命名
const 类名 = class {} //不常用

2. 类的属性

class Person {
  name = "孙悟空"; // Person的实例属性name 调用:p1.name
  age = 18;
  static test = "test静态属性"; // 使用static声明的属性是静态属性(类属性) 调用:Person.test
}

3. 类的方法

class Person {
  name = "孙悟空";
  sayHello(){
    console.log("大家好,我是" + this.name);
  } // 添加方法(实例方法)this就是当前实例(如:p1)
  static test(){
    console.log("我是静态方法", this);
  } // 静态方法(类方法)通过类来调用,静态方法中this指向的是当前类(如:Person)
}
const p1 = new Person();
pa.sayHello();
Person.test();

4. 类的构造函数

class Person {
  // 以下三个属性可以省略不写
  name;
  age;
  gender;
  // 该方法称为构造函数(构造方法),在调用类创建对象时执行
  constructor(name, age, gender){
    // 可以在构造函数中为实例属性进行赋值,this表示当前所创建的对象
    this.name = name;
	this.age = age;
	this.gender = gender;
  }
}
const p1 = new Person("孙悟空", 18, "男");

5. 面向对象的特点

(1)封装
  • 对象就是一个用来存储不同属性的容器
  • 对象不仅存储属性,还要负责数据的安全
  • 直接添加到对象中的属性不安全,因为可以被任意修改,确保数据的安全需要:
    (1)私有化数据:将需要保护的数据设置为私有,只能在类内部使用
    (2)提供setter和getter方法来开放对数据的操作
    • 可以控制属性的读写权限
    • 可以在方法中对属性的值进行验证
  • 封装主要用来保证数据的安全
  • 实现封装的方式
    (1)属性私有化 加#
    (2)通过getter和setter方法来操作属性
get 属性名(){
  return this.#属性
}
set 属性名(){
  this.#属性 = 参数
}

// 私有化属性
class Person {
  // 私有属性必须先声明
  #name;
  #age;
  #gender;
  constructor(name, age, gender){
    this.#name = name;
	this.#age = age;
	this.#gender = gender;
  }
}
(2)多态
  • JS中不会检查参数的类型,所以这就意味着任何数据都可以作为参数传递
  • 要调用某个函数,无需指定类型,只要对象满足某些条件即可
  • 多态为我们提供了灵活性
(3)继承
  • 可以通过extends关键词来完成继承
  • 当一个类继承另一个类时,就相当于另一个类中的代码复制到了当前类中(简单理解)
  • 继承发生时,被继承的类为父类(超类),继承的类为子类
  • 通过继承可以减少重复的代码,并可以在不修改一个类的前提下对其进行扩展
class Animal {
  constructor(name){
   this.name = name;
  }
  sayHello(){
    console.log(this.name + "在叫~~~");
  }
}

class Dog extends Animal {

}

class Cat extends Animal {

}

const dog = new Dog("旺财");
const cat = new Cat("汤姆");
console.log(dog); // Dog: {name: "旺财"}
console.log(cat); // Cat: {name: "汤姆"}
dog.sayHello(); // 旺财在叫~~~
cat.sayHello(); // 汤姆在叫~~~

总结:封装(安全性)、继承(扩展性)、多态(灵活性)

6. 对象结构

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

  • 直接通过对象所添加的属性
  • 在类中通过 x = y 的形式添加的属性
    (2)原型对象(prototype)
  • 对象中还有一些内容,会存储到其他的对象里(原型对象)
  • 在对象中会有一个属性来存储原型对象,这个属性叫做 proto
  • 原型对象也负责为对象存储属性(当我们访问对象中的属性时,会优先访问对象自身的属性,如果对象自身不包含该属性时,才会去原型对象中寻找)
  • 会添加到原型对象中的情况:
    (1)在类中通过xxx(){}方式添加的方法
    (2)主动向原型中添加属性或方法

标签:name,Person,对象,age,JavaScript,笔记,面向对象,class,属性
From: https://www.cnblogs.com/zibocoder/p/17058782.html

相关文章

  • 面向对象
    面向对象3要素1、封装​ 组装:将数据和操作组装到一起。​ 隐藏数据:对外只暴露一些接口,通过接口访问对象。比如驾驶员使用汽车,不需要了解汽车的构造细节,只需要知道使......
  • MySQL笔记01: MySQL入门_1.1 MySQL概述
    1.1MySQL概述MySQL是一个关系数据库管理系统(RelationalDataBaseManagementSystem,RDBMS)。它是一个程序,可以存储大量的种类繁多的数据,并且提供服务以满足任何组织的需要......
  • 学习笔记——Servlet底层源码分析;Servlet接口;ServletConfig接口;
    2023-01-17 一、Servlet底层源码分析1、Servlet结构图   说明:HttpServlet继承了GenericServlet类,GenericServlet实现了“ServletConfig”和“Servlet”两个接口,......
  • 学习笔记——架构之路
    2023-01-13一、基本功(1)工程结构管理掌握企业环境的搭建和管理(2)java开发规范P3C开发规约(3)高并发及网络编程需要考虑性能瓶颈(4)底层源码分析二、互联网常用技术——......
  • 新概念2册L6学习笔记
    L6PercyButtons本章词汇与讲解callv.此处表短暂的访问某地或某人let'scallonAda#拜访某人时用介词On搭配,否则let'scallAda容易理解为给Ada打电......
  • 读书笔记:价值投资.05.不为清单(一)
    老巴的教导千万别忘了:不做空,不借钱,不做不懂的东西.01.不做空(a股没有做空机制)做空有无限风险,因为一次错误就可能会致命.做空行为是投机行为,吾不该为之.......
  • 史上最详细的ROS学习笔记
    第一节:ROS的一些基本操作注意事项:在乌班图里面安装好ros之后,需要搭建ros集成开发环境,方便我们进行相关的操作,下载VScode和Terminator软件。Terminator安装命令:“sudoap......
  • 学习笔记——Spring中的注解;Spring中装配对象的注解;使用注解配置对象中属性
    2023-01-17一、Spring中的注解 1、使用注解的原因(1)使用注解将对象装配到IOC容器中(2)使用注解管理对象之间依赖关系(自动装配)2、Spring中装配对象的注解(1)@Component标......
  • ABB 800XA学习笔记29:AC 800M硬件10
    这一篇学习笔记我在新浪博客发表过,地址是ABB800XA学习笔记29:AC800M硬件10_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也记录一遍,以免丢失继续学习2.7硬件配置硬......
  • ABB 800XA学习笔记30:AC 800M硬件11
    2.7.5在模块总线上添加S800IO模板打开刚刚插入的控制器结构,右键单击模块总线并选择“插入单元”。 然后选择适当的S800I/O和位置(插槽)2.7.6在PROFIBUS总线上添......