系列文章目录

第一章:Class类的基本使用

第二章:Class类的属性与方法

第三章:继承

第四章:注意事项和应用

前言

前面我们学习了用构造函数模拟类,现在我们有了类语法,所以不再使用构造函数来模拟类

一、Class类的基本使用

 //使用class声明一个类class Person{//每个类都有构造方法constructor,实例化对象时执行构造方法//即使你不写构造方法,浏览器也会自动补全,但没有可执行的内容。constructor(name,age){//这里的this类似于构造函数中返回的实例对象。//一般在构造方法中定义属性,不定义方法this.name = name;this.age = age;}//这里定义方法等同于在构造函数的原型上定义方法,是实例的共同方法speak(){console.log('speak');}}//实例化一个Person对象:const p1 = new Person('小明',18);const p2 = new Person('小猪',19);const v = `${p1.name},${p1.age},${p2.name},${p2.age}`;console.log(v)//小明,18,小猪,19console.log(p1.speak == p2.speak); //true

二、类的两种定义方式

 //类的两种定义方式//一、声明形式class Person1{constructor(){}speak(){}}//二、表达式形式const Person2 = class{constructor(){}speak(){}}

三、立即执行的类

 //立即执行的类:与立即执行函数类似,但是有用new调用new (class{constructor(){console.log('constructor')}})()

四、属性和方法

1、实例的属性和方法

把属性写在构造方法的外面,则每个实例都会有默认的自己的这个属性。

把方法写在构造方法的外面,则这个方法存在于类构造函数的原型上

示例:

 class Person1{age = 0;sex = 'male';constructor(){}speak(){return "我是speak"}}const per1 = new Person1();const per2 = new Person1();console.log(per1.age,per1.hasOwnProperty("age"));//0 trueconsole.log(per2.speak(),per2.hasOwnProperty("speak"),Person1.prototype.hasOwnProperty("speak"));//我是speak false true

2.静态属性和方法(类的属性和方法)

const Person2 = class{constructor(){}//声明静态方法:在方法名前加staticstatic speak(){console.log('我是静态的');console.log(this); //this指向class}//声明静态属性:// static version = '1.0'; 不推荐这种写法,目前只是提案,有兼容性问题static getVersion(){return '1.0';}}//调用静态方法:由类调用Person2.speak()//获取静态属性console.log( Person2.getVersion());//1.0

五、私有属性和方法

1.什么是私有属性:

私有属性只能在类的内部访问和修改。

2.为什么需要私有属性和方法:

一般情况下,类的属性和方法都是公开的,公有的属性和方法可以被外界修改,造成意想不到的错误。

3.模拟私有属性和方法:

js中还没有私有属性的语法,但是我们可以模拟私有属性和方法,达到我们想要的效果。

1.下划线开头表示私有的

下划线开头表示私有是整个行业共同约定的。但是这个方法不具备很强的约束力。

 class Person{constructor(name){this._name = name;}speak(){console.log('speak');}getName(){return this._name;}}const p = new Person("xiaohong")console.log(p.getName());

2.将私有属性和方法移出类

//实际开发中我们会在一个模块中声明类,这里用IIFE模拟一个模块。(function(){//在当前作用域中声明变量name,而不是在类中声明name属性let name = "";class Person{constructor(username){//name是类的属性不是实例的属性// console.log(Person.hasOwnProperty("name")) truename = username;}speak(){console.log('speak');}getName(){return name;}}//暴露Personwindow.Person = Person;})();//实际开发中的代码也不会写在全局作用域中,也会写在一个模块中,这里我们也用IIFE模仿一个模块(function(){const p = new Person('Alex');console.log(p.getName()); //Alex// console.log(p.hasOwnProperty("name")) false})();

Class类的基本使用相关推荐

  1. 自己搜集编写的Delphi 通用函数

    { ********************************************************************** } { Currency Common Functio ...

  2. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  3. MybatisPlus忽略实体类中的非数据库字段、JPA忽略实体类中的非数据库字段、HeHibernate忽略实体类中的非数据库字段

    mybatis plus忽略映射字段时可以在实体类属性上使用以下注解: @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的. @TableField(e ...

  4. IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...

    使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解 一.使用Hibernate自动生成实体类 1.在项目上右键,选择Add Framework Support找到 Hibern ...

  5. IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成

    在新建类文件的时候自动生成注解,诸如我们常见的那些 作者,创建时间,TODO 等等 将以下格式的代码放在Settings -> File and Code Templates -> Inc ...

  6. javabean实体类与实体类之间的快速转换

    一.Dozer是什么? dozer是一个能把实体和实体之间进行转换的工具.只要建立好映射关系.就像是ORM的数据库和实体映射一样. 使用方法示例如下: // article(PO) -> art ...

  7. 利用dom4j将实体类转换为对应的xml报文

    利用dom4j生成xml报文 目标格式: <?xml version="1.0" encoding="GBK"?><Packet type=& ...

  8. Idea groovy表生成实体类带注释

    Idea groovy表生成实体类带注释 1.点开datasourse,打开idea带的数据库工具,具体添加数据库连接,这里不描述. 这时点击会生成一个poji 这时生成的pojo中是不带中文注释的, ...

  9. java带参数的方法笔记_具有Java参数的方法的类声明

    类声明可以包含在Java中具有参数的方法.演示此过程的程序如下: 示例class Message { public void messagePrint(String msg) { System.out ...

  10. Python 闭包、单个装饰器、多个装饰器、装饰器修饰类、应用场景

    1. 闭包 在 Python 中,函数也可以作为参数.我们可以执行下面的代码: def func(a, b):return a + bprint(func) 我们直接输出函数名,而没有加括号.输出结果 ...

最新文章

  1. SQL Server的数据库开发工具
  2. 在HYPER-V中利用差异磁盘和SYSPREP技术安装多个WINDOWS 2008
  3. 解析没有id的html,网络爬虫干货,还在用正则匹配html?专业的解析组件了解一下...
  4. OpenCV 4.2.0 发布,Intel 开源的计算机视觉库
  5. hive和hbase区别和联系
  6. mongodb的id的唯一性_mongodb中的objectid是collection中唯一,还是全db唯一,还是全宇宙唯一?...
  7. 知乎热榜:程序员达到什么水平能拿到20k月薪
  8. 计算机组成原理单周期mips,计算机组成原理CPU单周期数据通路(MIPS)
  9. php命名规则几点内容
  10. [笔试面试题] 9-数据结构与算法篇
  11. 用Netfilter模块实现基于令牌桶的每IP地址流量控制
  12. c语言设计数字增量pi控制器,PI控制器的工作原理是什么?
  13. 加入go行列的一个敲门砖吗----小玩意cs多人即时聊天,没有用数据库的,没有用框架的
  14. word插入脚注后最后一页多了一个分页符(下一页),导致最后多了一个空白页,删除不掉。
  15. myeclipse误删文件恢复
  16. 查看android端BKS类型的证书库
  17. 量化金融kaggle竞赛汇总
  18. Android短彩信源码解析-短信发送流程(一)
  19. HTTP错误403.9-禁止访问:连接的用户过多 相关
  20. 深度学习网络图画图工具

热门文章

  1. GB2312、GB18030、GBK、UNICODE、BIG5之间兼容关系如何?
  2. Redis安装与使用
  3. Python计算机视觉编程学习笔记 九 图像分割
  4. 经典算法研究系列:七、深入浅出遗传算法
  5. html中a标签的种类
  6. redis常用命令手册大全 - 笔记
  7. 如何进行SYN攻击防范
  8. C++RTTI运算符
  9. ASP内置对象及其作用
  10. Confluent上市与Cloudera私有化背后:从硅谷大数据公司的势力更替看数据分析的未来...