promise-reflect-proxy

news/2025/2/4 1:03:03/

1-Object.defineProperty

这个方法是用来为对象新增属性或者修改对象属性并返回这个对象的。
属性描述符分为数据描述符和访问器描述符;
不是专门用于劫持对象属性的方法,想要监听属性的新增与删除也是无法做到的。

2-Proxy提供对于对象的代理

proxy类是es6提出的用于代理对象的,当我们想要监听外界对于对象的操作的时候我们使用new Proxy创建一个proxy对象,传入需要监听的对象和处理对象,这样外界对于被监听对象的操作都通过这层代理对象完成,也就可以监听对象的操作;
传入的handler对象里面内置了很多方法,对外暴露对对象可以进行的操作,set、get、has、deleteProperty【增删查改哈哈】
对象中以key-value的方式存储的。

let proxy = new Proxy(obj, {//target是被监听的对象//receiver是调用的代理器对象,receiver参数只有在get、set方法里有,可以改变里面的thisset(target, key, value, receiver) {target[key] = value},get(target, key, receiver) {console.log(target)console.log(typeof target)return target[key]},has(target, key) {//查找属性是否在目标对象及其原型上return key in target},deleteProperty(target, key) {delete target[key]},construct(target, args, newTarget) {//所以target是函数对象吗//return new target(args)return Reflect.construct(target,args,newTarget)},apply(target, thisArg, otherArgs) {//修改this指向,apply(this对象,数组)target.apply(thisArg, otherArgs)}})

3-Reflect提供很多操作对象的方法

Reflect.defineProperty等方法等同于Object.defineProperty这些,因为Object是个构造函数,我们直接在上面操作属性是很奇怪的,将操作对象的方法集中到Reflect对象上面变得规范,通过Proxy是代理对象,我们可以将Proxy和Reflect结合,做到代理对象监听对象属性变化同时还可以不操作原对象。
常用方法和Proxy差不多:get、set、has、deleteProperty、apply、construct

  let obj = {name: "yyy",age: 21}let proxy = new Proxy(obj, {//target是被监听的对象//receiver是调用的代理器对象set(target, key, value, receiver) {// target[key] = valueReflect.set(target,key,value)},get(target, key, receiver) {console.log(target)console.log(typeof target)// return target[key]return Reflect.get(target,key)},has(target, key) {//查找属性是否在目标对象及其原型上// return key in targetreturn Reflect.has(target,key)},deleteProperty(target, key) {     // delete target[key]Reflect.deleteProperty(target,key)},construct(target, args, newTarget) {//所以target是函数对象吗return new target()},apply(target, thisArg, otherArgs) {//修改this指向,apply(this对象,数组)target.apply(thisArg, otherArgs)}})console.log(obj.name)

4-Promise异步编程的解决方案,解决回调地狱问题

Pomise是一个类,使用new实例化这个类的时候传入一个回调函数,这个回调函数被立即执行,这个函数传入两个参数resolve回调函数和reject回调函数;
当我们执行resolve回调函数的时候【状态变成fufilled的时候】会执行Promise对象的then方法,执行reject回调函数的时候执行的是Promise对象的catch方法;
Promise使用的时候分为三个状态,pending状态也就是开始未决定的状态;当resolve回调成功执行了就会变成fufilled已完成状态;当reject回调执行了状态变成rejected拒绝状态;
resolve回调函数传入的参数可以是普通数据也可以是回调函数,如果传入的参数不是回调函数的时候,会将状态变成fufilled状态,reject方法还会执行但是状态被确定不会改变了。
但是传入resolve函数的参数是一个Promise或者是实现了then方法的对象的时候,会根据新的Promise以及then方法的状态决定旧的Promise的状态;
then方法和catch方法都是promise对象的实例方法,then方法传入fufilled回调,状态变成fufilled的时候调用这些then方法;catch方法传入rejected回调,状态变成rejected的时候调用这些catch方法;
then方法和catch方法都返回Promise对象,所以都可以链式调用。
返回的Promise处于什么状态呢?
如果是回调函数执行中pending,回调函数执行完成得到一个结果【普通数据、Promise、实现了then方法的对象】的时候状态变成fufilled;如果抛出异常的时候变成reject状态;

5-async和await

async是标记异步函数的关键字;

异步函数和普通函数的区别:

异步函数内部执行和普通函数一样,但是异步函数的返回值会被Promise.resolve函数的参数,如果是返回的Promise或者实现了then方法的对象会根据实现结果决定promise的状态;在异步函数里面抛出异常,是会作为reject函数的参数,也就是异常需要通过then或者catch方法获取。
aswit关键字是在async标记的异步函数内部使用,后面跟一个返回Promise的异步函数,根据异步函数最终状态决定最终的结果,并使用常量接收这个结果,达到用书写同步代码的方式使用异步函数;【通俗来讲,也就是等待异步执行结果并将异步结果赋值给常量】


http://www.ppmy.cn/news/92452.html

相关文章

charles使用

charles​ 一、概念​ charles是一款非常优秀的抓包工具,全平台支持,在mac,windows,linux上都可以使用,既可以抓 取web端的包,也可以抓app端的包。 ​ charles主要的功能包括如下几点: ​ 截取…

Scala介绍,开发环境搭建,语法,高级特性,编程技巧

Scala是一种面向对象和函数式编程语言,它运行在Java虚拟机上,可以与Java代码无缝地集成。Scala的设计目标是将面向对象和函数式编程的最佳实践结合起来,以提高代码的可读性、可维护性和可扩展性。本文将介绍Scala的开发环境搭建、语法、高级特…

腾讯云CVM服务器端口怎么开通?以开80端口为例

腾讯云CVM服务器端口是通过配置安全组规则来开通的,阿腾云以开通80端口为例来详细说下腾讯云轻量应用服务器开启端口的方法,其他的端口的开通如8080、1433、443、3306、8888等端口也适用于此方法,腾讯云服务器开通端口教程如下: …

RabbitMQ的工作模式

RabbitMQ的工作模式 一.simple模式(即最简单的收发模式) 二.work工作模式(资源的竞争)publish_subscribe发布订阅(../../../../../0马士兵/新建文件夹/BAT面试突击资料(1)/整理/BAT面试突击资料/15-消息中间件MQ面试题(2020最新 版&…

ESP-01模块刷固件

ESP-01模块刷固件 0.前言一、准备二、烧写1.接线2.软件设置3.检验 0.前言 最近需要用esp-01模块作为wifi模块上云,但由于出厂自带固件太过老旧,经常会出现奇奇怪怪的警告,所以记录下如何给ESP-01刷写较新的固件。 一、准备 需要准备三个东西…

动态线程池 dynamic-tp 源码

目录 1. 介绍 2. Spring 环境整合配置源码 2.1 DtpBeanDefinitionRegistrar 2.2 DtpPostProcessorRegistrar 2.3 ApplicationContextHolder 2.4 DtpBaseBeanConfiguration 2. 动态线程池 DtpLifecycle 生命周期源码 3. 动态线程池 DtpRegistry 注册源码 4. 动态线程池…

卓越讲坛:美洲作物与人口关系辨——兼论历史研究中的跨学科方法

卓越讲坛:美洲作物与人口关系辨——兼论历史研究中的跨学科方法 学习过程 大国的发展与人口的数量息息相关,而巨大的人口数量需要足够的粮食作为支撑。在17世纪中期到19世纪,即明清之际到清朝中期,中国人口从一亿多增长到了四亿…

insmod传递带空格的字符串

Makefile内容 KVERS $(shell uname -r)# Kernel modules obj-m book.o# Specify flags for the module compilation. #EXTRA_CFLAGS-g -O0build: kernel_moduleskernel_modules:make -C /lib/modules/$(KVERS)/build M$(CURDIR) modulesclean:make -C /lib/modules/$(KVERS)/…