题目来源: 牛客
单例模式涉及单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建
// 懒汉单例
class LazySingleInstance {
private constructor {}
private static instance: LazySingleInstance;
static getInstance() {
if (!LazySingleInstance.instance) {
return LazySingleInstance.instance;
}
LazySingleInstance.instance = new LazySingleInstance();
return LazySingleInstance.instance;
}
}
// 饿汉单例
class HungrySingleInstance {
private constructor {}
private static instance = new HungrySingleInstance();
static getInstance() {
return HungrySingleInstance.instance;
}
}
class Event {
constructor() { this.events = {} }
// 订阅
on(type, callback) {
if (this.events[type] === undefined) this.events[type] = [];
this.events[type].push({ listener: callback });
}
// 发布
emit(type. args) {
this.events[type].forEach(ele => {
ele.listener(args)
});
}
}
最大的缺点是松耦合,需要中间的代理,增加了系统的复杂度
泛型的特点就是带有“类型参数”
function getFirst<T>(arr: T[]): T {
return arr[0];
}
用于组合一系列常量从而实现共享复用
interface可以在结构定义中引用interface定义的接口
async/await适用于异步请求相互独立的情况
Promise适用于同时进行多个异步请求的情况
如果有一个接口挂了,那么会立刻将其reject掉,不再等待其他异步操作执行
会直接抛出错误,可以用try/catch捕获
Promise是一个对象,代表了一个异步操作的最终完成或者失败,本质上Promise是一个函数返回的对象,可以在上面绑定回调函数,就不需要一开始把回调函数作为参数传入
const ajax = (url) => {
return new Promise((resolve, reject) => {
const req = new XHLHttpRequest();
req.open("GET", url, true);
req.onload = () => req.status === 200 ? resolve(req.responseText) : reject(new Error(req.statusText));
request.onerror = () => reject(new Error(req.statusText));
request.send();
});
}
const url = "/ajax/get";
ajax(url).then(value => console.log(value)).catch(error => console.log(error));
每一个构造函数有一个prototype指向其原型对象
每一个原型对象有一个constructor指向其构造函数
每一个实例对象有一个__proto__指向其原型对象
字符串的构造函数是String。当String作为构造函数使用时,会创建一个String对象而非原始数据类型;而被作为函数调用时,会将参数强制转换成一个字符串原始类型
call和apply的区别在于apply的传参使用的是数组
call和bind的区别在于bind不会离开调用函数
Array.find
绝大多数场合可以直接使用===,只有检测是否为null/undefined时可以使用==
使用Array.from即可
loader就是一个函数,接受原始资源作为参数,输出进行转换后的内容
plugin会在webpack生命周期中监听事件,并在合适的时机改变输出结果
特点是回放。
特点在于回溯
算法:深度优先遍历和广度优先遍历
企业的软件项目开发你一定要知道的那些流程!
程序员遇到技术问题该怎么解
如何理解这6种常见设计模式?
菜鸟教程
如何使用js来实现一个发布订阅模式
设计模式之发布订阅模式—— 一文搞懂发布订阅模式
阮一峰TypeScripe教程
TypeScript字符串枚举,以及何时和如何使用它们
9个常用ES6特性归纳(一般用这些就够了)
Promise和async/await的两种常用的实际应用场景
async,await做错误处理,每请求一个接口都要try,catch一下吗?
JavaScript——promise(一)基础篇
5分钟带你搞懂 构造函数、原型对象、实例对象、原型、原型链
MDN官方文档
ts class中的成员可见性(public,protected,private,static)
手写Webpack生命周期及其实现过程
彻底掌握 Webpack 中 Loader 和 Plugin 的机制
js判断数据类型常用的6种方法
新手发文,礼貌求关❤️