前端培训-中级阶段(31)- Class的基本语法,Class的继承(2019-12-26期)

简介: 前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。

前言BB



ECMAScript 2015 中引入的类(Class)实际上是基于原型的继承的语法糖。不是新的面向对象的继承模型。


其实我用的并不多,写写小活动啥的也用不上。


之前用来写了个小后台,ThinkJS 内部就使用的 Class 的形式。


体验了一下,然后因为写起来不太爽放弃了,vue + TypeScript。

也是体验了一下,Angular 。


Class



可以理解为特殊的函数(必须 New。声明提升,死区。执行在严格模式)


声明


class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
}
class Circle {
  constructor(point, r) {
    this.point = point;
    this.r = r;
  }
}
等价于
function Circle(point, r){
    this.point = point;
    this.r = r;
}
new Circle([50, 50], 10)

bVbBP5m.webp (1).jpg

bVbBP5p.webp.jpg


构造函数 Constructor


New 一个对象的时候,做了几件事?

  1. 初始化一个空对象


  1. 绑定 this


  1. 执行构造函数


  1. 返回这个对象(不需要 return 来返回)

因为类是可以继承的,所以可以使用 super 关键字来调用父类的构造函数。


class Circle {
  constructor(point, r) {
    // super() //这样来调用父类的构造函数
    this.point = point;
    this.r = r;
  }
}


原型链方法


class Circle {
  constructor(point, r) {
    this.point = point;
    this.r = r;
  }
  // 原型链方法,实例化之后可以计算面积
  get area() {
    console.log('get area')
    return this.calcArea()
  }
  // 原型链方法,实例化之后可以计算面积
  calcArea() {
    return Math.PI * Math.pow(this.r, 2)
  }
}
//new Circle([50, 50], 20)

bVbBQaa.webp.jpg


原型方法、静态方法、静态字段


class Point {
    static staticField = 'static field';
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
    static distance(a, b) {
        const dx = a.x - b.x;
        const dy = a.y - b.y;
        return Math.hypot(dx, dy);
    }
}
const p1 = new Point(5, 5);
const p2 = new Point(10, 10);
console.log(Point.distance(p1, p2));

bVbBQpL.webp.jpg


属性声明


class Point {
    x=0
    y=0
    constructor(x, y) {
        if(x)this.x = x;
        if(y)this.y = y;
    }
}
new Point()


bVbBQr0.webp.jpg


内部属性声明


类似于之前的闭包内的变量


class Rectangle {
  #height = 0;
  #width;
  constructor(height, width) {    
    this.#height = height;
    this.#width = width;
    console.log(this.#height)
  }
}
rect = new Rectangle(1,2)
// rect.#height


bVbBQsM.webp.jpg


继承


如果子类中存在构造函数,则需要在使用 this 之前首先调用 super()


class Animal { 
  name='Breaux';
  constructor(name) {
    this.name = name;
  }
  speak() {
    console.log(this.name + ' makes a noise.');
  }
}
class Dog extends Animal {
  age = 0;
  constructor(age) {
    super('Mitzie')
    this.age = age;
  }
  speak() {
    console.log(this.name + ' barks.'+`age: `+this.age);
  }
}
var d = new Dog(10);
d.speak();// 'Mitzie barks.age: 10'


bVbBQFZ.webp.jpg


验证


New


bVbBP1s.webp.jpg


提升&死区


bVbBP1h.webp.jpg


严格模式


bVbBP04.webp.jpg


相关文章
|
3月前
|
前端开发 程序员
【前端web入门第二天】01 html语法实现列表与表格_合并单元格
本文介绍了HTML中的列表与表格的使用方法。列表包括无序列表(`<ul>`嵌套`<li>`)、有序列表(`<ol>`嵌套`<li>`)和定义列表(`<dl>`嵌套`<dt>`和`<dd>`)。
66 19
|
3月前
|
前端开发 程序员 C++
【前端web入门第一天】01 开发环境、HTML基本语法文本标签
本文档详细介绍了HTML文本标签的基础知识。首先指导如何准备开发环境,包括安装VSCode及常用插件;接着全面解析HTML的基本结构与标签语法,涵盖从基本骨架搭建到注释的使用,以及标题、段落、换行和平行线、文本格式化等标签的具体应用,适合初学者循序渐进地掌握HTML。
|
4月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
27 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
4月前
|
存储 前端开发 JavaScript
【前端学JAVA】有手就会!10min快速入门java的基础语法(2)
【8月更文挑战第8天】10min快速入门java的基础语法
42 2
【前端学JAVA】有手就会!10min快速入门java的基础语法(2)
|
4月前
|
前端开发 JavaScript 程序员
前端 JavaScript 的 _ 语法是个什么鬼?
前端 JavaScript 的 _ 语法是个什么鬼?
|
5月前
|
缓存 JavaScript 前端开发
前端框架与库 - Vue.js基础:模板语法、数据绑定
【7月更文挑战第14天】Vue.js 是渐进式框架,以简洁API和高效数据绑定知名。本文聚焦模板语法与数据绑定,解释常见问题和易错点,助力初学者避坑。模板语法中,{{ expression }} 用于渲染值,v-bind/: 用于动态绑定属性。数据绑定涉及文本、属性和事件,注意v-model适用于表单元素,计算属性有缓存。理解正确用法,借助文档和IDE,可提升开发质量和效率。善用Vue.js,打造响应式UI。
159 4
|
6月前
|
前端开发 JavaScript Java
【前端技术】 ES6 介绍及常用语法说明
【前端技术】 ES6 介绍及常用语法说明
51 4
|
6月前
|
存储 缓存 JavaScript
【前端 - Vue】之 Keep-Alive缓存组件使用语法及原理解析,超详细!
【前端 - Vue】之 Keep-Alive缓存组件使用语法及原理解析,超详细!
|
7月前
|
前端开发 JavaScript
前端 js 经典:class 类
前端 js 经典:class 类
45 2
|
7月前
|
前端开发 JavaScript
前端 TS 快速入门之三:class 类
前端 TS 快速入门之三:class 类
90 1