day0513

这篇博客探讨了Promise的使用,包括async和await的原理,强调了它们在异步编程中的作用。同时,详细解释了事件循环eventloop的机制,区分了微任务和宏任务。此外,还介绍了typescript的访问修饰符public、protected和private的用法,以及抽象类和面向对象封装事件抛发的概念。
摘要由CSDN通过智能技术生成

day0513

Promise

promise 和async、await

阻塞式同步

async异步函数自动返回一个promise

async 函数中await可以等待的前提条件有两个
1.必须再async函数,当前这个函数必须是async函数
2.await后面函数返回的内容必须是promise

事件循环eventloop

同步任务:微任务 宏任务
异步任务

宏任务 setTimeout setInterval
微任务 Promise
先执行同步任务,遇到微任务时,将其放在当前任务列的最底端,
遇到宏任务则会开辟一个新任务列,并且放在任务列的最顶端

typescript

public 当前类,子类和实例化都可以调用这个属性和方法,也可以覆盖
protected 当前和子类可以调用这个属性和方法,也可以覆盖,实例化对象不能调用
private 当前类可以使用这个方法和属性,子类和实例化对象不能调用

在父类中定义的私有方法,在子类中不可以重复实现,也不可以调用

抽象类是不能实例化的,只能被继承
抽象类是具备接口和类的特征,抽象属性和方法在继承后可以灵活定义
/非抽象属性和方法可以处理共有的逻辑内容

面向对象封装事件抛发

导入不加.ts扩展名
EmitterEvent.ts:

import EmitterTarget from "./EmitterTarget";

export default class EmitterEvent{
    public target:EmitterTarget|null=null;
    public currentTarget:EmitterTarget|null=null;
    public type:string;
    [key:string]:number|string|boolean|object|null;
    constructor(type:string){
        this.type=type;
    }
}

EmitterTarget.ts:

import EmitterEvent from "./EmitterEvent";
interface IEventDic{
    [key:string]:Array<Function|null>;
}
export default class EmitterTarget{
    private eventDic:IEventDic={};
    constructor(){

    }
    public addEventListener(type:string,listener:Function):void
    {
        if(this.eventDic[type] && this.eventDic[type].indexOf(listener)>-1) return;
        if(!this.eventDic[type])this.eventDic[type]=[];
        this.eventDic[type].push(listener);
    }
    public removeEventListener(type:string,listener:Function):void
    {
        var index=this.eventDic[type].indexOf(listener);
        if(!this.eventDic[type] || index===-1) return;
        this.eventDic[type][index]=null;
        this.eventDic[type].splice(index,1);
    }
    public dispatchEvent(evt:EmitterEvent):void
    {
        if(!this.eventDic[evt.type] || this.eventDic[evt.type].length===0) return;
        evt.currentTarget=this;
        evt.target=this;
        for(var i=0;i<this.eventDic[evt.type].length;i++){
            (this.eventDic[evt.type][i] as Function).call(this,evt);
        }
    }
}

Main.ts:

// var target=new EventTarget();
// target.addEventListener("chilema",chilemanHandler);

import EmitterEvent from "./EmitterEvent";
import EmitterTarget from "./EmitterTarget";

// var evt=new Event("chilema");

// target.dispatchEvent(evt);

// function chilemanHandler(e:Event){
//     console.log(e.type,"aaaa");
// }

var target:EmitterTarget=new EmitterTarget();
target.addEventListener("chilema",chilemaHandler);

var evt:EmitterEvent=new EmitterEvent("chilema");
evt.a=10;
target.dispatchEvent(evt);


function chilemaHandler(e:EmitterEvent){
    console.log(e.type,"aaaa",e.a);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值