ES5、ES6类的定义

简介: ES5和ES6都支持类的定义,但ES6引入了更简洁的语法。在ES5中,类是函数,方法绑定在原型上;而ES6使用`class`关键字,构造方法为`constructor`,方法直接定义在类内。ES6的类继承使用`extends`关键字,子类需调用`super`初始化父类属性。示例展示了Person类及其Student子类的定义和方法调用。

ES5定义类
1、类名首字母一般都是大写

2、可以当成普通函数调用,但一般都通过new关键字调用,通过关键字调用会生成一个新的对象

3、通过new关键字创建的对象,给当前的this绑定成新创建的对象

4、给当前类定义一个方法,通常绑定在原型上

<script>
  function Person(name, age) {
    this.name = name;
    this.age = age;
  }
  Person.prototype.running = function () {
    console.log(this.age, this.name, "running");
  };
  var p = new Person("why", 18);
  console.log(p.name, p.age);
  p.running();

ES6定义类
1、想要给类中传值,在ES6里面所有的类都可以实现一个方法 constructor(构造方法)

2、类中定义方法直接写在类里面,与ES5中原型绑定方法效果是一致的

类的定义:

  // ES6定义类
  class Person {
    // 构造方法:在创建类的时候会创建一个方法
    // 通过new关键字创建实例的时候会被执行
    constructor(name, age) {
      this.name = name;
      this.age = age;
    }
    // 定义方法
    running() {
      console.log(this.name, this.age, "running");
    }
  }
  const p = new Person("why", 18);
  p.running();

  // this绑定
  // call 可以主动给一个函数绑定this
  let func = p.running;
  var obj = {
    name: "edit",
    age: 1,
  };
  // func.call(obj);
  func = func.bind(obj);

类的继承

面向对象有三大特性

1、封装

2、继承

    (1)减少重复代码

    (2)多态的前提(弱类型语言鸭子类型)

3、多态

<script>
  class Person {
    constructor(name, age) {
      this.name = name;
      this.age = age;
    }
    running() {
      console.log("running");
    }
  }

  class Student extends Person {
    constructor(name, age, sno) {
      // 构造器中如果有继承需要初始化父类对象,父类中才会有相关东西,才能调用this,  super必须调用
      super(name, age);
      this.sno = sno;
    }
  }
  const stu = new Student("why", 18, 151);
  console.log(stu.age, stu.name, stu.sno);
  stu.running();

  class Student extends Person {
    constructor(name, age, title) {
      super(name, age);
      this.title = title;
    }
  }
相关文章
|
Prometheus 监控 Cloud Native
hyperf| hyperf/metric 上手指南
这期又开始聊微服务的基础设施之一: 实时监控. 更准确的说法, 基于 prometheus 的实时监控. 关于技术选型这里就不多啰嗦啦, 很多时候「从众」或者「用脚投票」往往是最有效的
980 0
|
11月前
|
负载均衡 监控 算法
每个程序员都应该知道的 6 种负载均衡算法
每个程序员都应该知道的 6 种负载均衡算法
1161 2
|
数据挖掘
InsTag:大语言模型监督微调数据标签标注工具
魔搭社区发布了一个名为“InsTagger”的工具,用于分析LLM(大语言模型)中符合人类偏好的监督微调(SFT)数据。InsTagger 是基于 InsTag 方法训练的本地指令标签标注器,用于为符合人类偏好的监督微调数据集中的指令标注描述其意图和语义的标签,从而指导指令的分流或监督微调数据集的分析。
|
SQL Java 数据库连接
还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis
还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis
304 1
|
11月前
|
JavaScript 前端开发 数据可视化
【SpringBoot+Vue项目实战开发】2020实时更新。。。。。。
【SpringBoot+Vue项目实战开发】2020实时更新。。。。。。
137 0
|
安全 Java 调度
Java一分钟之-Java图形绘制:Graphics2D与Shape
本文介绍了Java中的`Graphics2D`和`Shape`接口,用于实现强大的图形绘制功能。`Graphics2D`提供丰富的绘图操作,而`Shape`接口包含各种几何形状并支持碰撞检测。常见问题包括忘记调用`super.paintComponent(g)`、误解坐标系统、忽略`Graphics2D`设置和多线程处理不当。避免这些问题的关键在于正确清理画布、理解坐标系统、设置图形属性以及在事件调度线程中更新GUI。通过实践和学习,可以提升Java图形绘制技能。
265 1
|
NoSQL Java Redis
Redis 从入门到精通之Redis数据排序
Redis支持对List、Set和Sorted Set元素进行排序,排序命令是`SORT`。`SORT`命令可以根据指定的排序规则对列表、集合或有序集合的元素进行排序,并返回排序后的元素列表或子集。使用Jedis和RedisTemplate分别实现Redis列表、集合和有序集合排序操作的示例代码
1633 91
|
API 数据安全/隐私保护
如何使用Postman 测试Https 网站?
如何使用Postman 测试Https 网站?
862 0
|
监控 Linux 网络安全
Domain Admin域名和SSL证书过期监控到期提醒
用于解决,不同业务域名SSL证书,申请自不同的平台,到期后不能及时收到通知,导致线上访问异常,被老板责骂的问题。同时,Domain Admin也是一个轻量级监控方案,占用系统资源较少,安装包仅1.5 MB。基于Python3 + Vue3.js 技术栈实现的域名和SSL证书监测平台。支持证书:单域名证书、多域名证书、通配符证书、IP证书、自签名证书。通知渠道:支持邮件、Webhook、企业微信、钉钉、飞书等通知方式。证书部署: 单一主机部署、多主机部署、动态主机部署。的过期监控,到期提醒。
945 3
Domain Admin域名和SSL证书过期监控到期提醒
|
存储 缓存 自然语言处理
在工作中 ElasticSearch 的一些使用规范总结
自己在工作中总结的关于 ElasticSearch 的一些使用规范,如有不当的地方,欢迎指正。