下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 11 | 类(2):抽象类与多态
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

TypeScript开发实战

共47讲 · 约450分钟
2992
免费
01 | 重塑“类型思维”
免费
02 | 类型基础(1):强类型与...
免费
03 | 类型基础(2):动态类型...
免费
04 | 编写你的第一个TypeScrip...
免费
05 | 基本类型
06 | 枚举类型
07 | 接口(1):对象类型接口
08 | 接口(2):函数类型接口
09 | 函数相关知识点梳理
10 | 类(1):继承和成员修饰...
11 | 类(2):抽象类与多态
12 | 类与接口的关系
13 | 泛型(1):泛型函数与泛...
14 | 泛型(2):泛型类与泛型...
15 | 类型检查机制(1):类型...
16 | 类型检查机制(2):类型...
17 | 类型检查机制(3):类型...
18 | 高级类型(1):交叉类型...
19 | 高级类型(2):索引类型
20 | 高级类型(3):映射类型
21 | 高级类型(4):条件类型
22 | ES6与CommonJS的模块系统
23 | 使用命名空间
24 | 理解声明合并
25 | 如何编写声明文件
26 | 配置tsconfig.json(1)...
27 | 配置tsconfig.json(2)...
28 | 配置tsconfig.json(3)...
29 | 编译工具:从ts-loader到...
30 | 代码检查工具:从TSLint到...
31 | 使用Jest进行单元测试
32 | 创建项目
33 | 组件与类型(1):函数组...
34 | 组件与类型(2):高阶组...
35 | 事件处理与数据请求
36 | 列表渲染与路由
37 | Redux与类型
38 | 搭建服务端开发环境
39 | 列表的CRUD
40 | 导出Excel
41 | 搭建Vue开发环境
42 | 组件封装
43 | 组件发布
44 | 共存策略
45 | 宽松策略
46 | 严格策略
47 | 结束语
本节摘要

精选留言(5)

  • 2019-07-28
    这里有不明白的地方:let animals: Animal[] = [dog, cat] 这句代码有疑惑,我的理解是animals是一个数组类型,数组的每一项应该是一个Animal类,但是数组的每一项确是Animal的实例对象,这个咋么理解呢? Animal类型包括Animal的实例吗?
    感觉前面视频没有看到这种用法,是我忽略了,还是这是一种特别的写法呢?

    作者回复: 实例的类型就是类的类型,因为它具备类的必要属性。

    2
    2
  • 2019-11-14
    class WorkFlow {
        add() {
            console.log('git add')
            return this
        }
        commit() {
            console.log('git commit')
            return this
        }
    }
    let workFlow = new WorkFlow()
    // 方法的链式调用
    console.log(workFlow.add().commit(), 'workFlow.add().commit()')

    class MyFlow extends WorkFlow{
        next() {
            console.log('class MyFlow extends WorkFlow next')
            return this
        }
    }
    let myFlow = new MyFlow()
    console.log(myFlow.next(), 'workFlow.add().commit()')
    console.log(new MyFlow.next(), 'workFlow.add().commit()')

    最后一行编辑器报错Property 'next' does not exist on type 'typeof MyFlow,为什么,少了什么吗
    展开

    作者回复: new MyFlow().next(),少了括号

  • 2019-09-24
    多态 在父类中定义,在子类有不同的实现
    抽象类 只可以被继承,不可以被实例化
    链式:在所有的方法中每次都返回当前对象
  • 2019-09-11
    老师,最后的this,难道不是原型链吗,在myflow中找不到step方法,去原型中查找,myflow继承自flow

    作者回复: 对,本质上就是原型链查找

  • 2019-08-20
    老师,关于 this 的多态,您在视频中提到「 this 既可以是父类型,也可以是子类型 」,但后来做的实验发现返回的好像都是子类型 MyFlow,和父类 WorkFlow 无关。该怎么理解这样的输出结果呢?
    实验如下:
    ```typescript
    class WorkFlow {
        step1() { return this; }
        step2() { return this; }
    }
    class MyFlow extends WorkFlow {
        next() { return this; }
    }
    let this1: WorkFlow = new MyFlow().next().step1().next().step2();
    let this2: WorkFlow = new MyFlow().next().step1();
    let this3: WorkFlow = new MyFlow().step1();
    console.log( this1 ); // MyFlow{}
    console.log( this2 ); // MyFlow{}
    console.log( this3 ); // MyFlow{}
    ```
    控制台中的运行结果都是这样的——
    MyFlow{
        __proto__: WorkFlow {
            constructor: f MyFlow()
            next: f()
            __proto__: {
                step1: f ()
                step2: f ()
                constructor: f WorkFlow()
                __proto__: Object
            }
        }
    }
    展开

    作者回复: MyFlow 是 Workflow的子类,所以它们的类型是兼容的,也可以看成等价,就是不做区分。

    1