网站首页 > 技术文章 正文
嗨,我是你稳定更新、干货超级多的勾勾。
在我们学习 JavaScript 过程中,操作繁琐的 API 令人头秃,总是让我们顾了东头,又忘了西头。
以 Object 为例,ES5 中提出的 Object.defineProperty() 是用来定义对象属性 API 的,它的用法也很明确。
而在 ES6+ 中提出的 Proxy 也发挥了同样的作用,甚至比前者做得更好。这就让切图仔们痛苦不已。同样,这些问题在前端面试中也是常常被问到的。
因此,Reflect 顺势而生。它给开发者提供了一套统一的操作对象的 API。这让对象操作终于有了一套自己的官方标准,不再“因人而异”了。与此同时,它也给大家带来了一些学习成本。话不多说,我们先来刷几个 API。
Reflect 静态方法 apply()
var obj = {}
function fn(q,r){
console.log(q,r) //"as",23
console.log("111",this) // {}
return "hello world"
}
let a = Reflect.apply(fn,obj,["as",23])
console.log(a) // hello world
根据上面的代码,fn 就是我们的目标函数 target ,obj 就是替换 target 中 this 的对象,["as",23] 里的元素就是 target 中的参数集。用法跟 Function.apply() 的用法一致。
Reflect 静态方法 ownKeys()
let obj = {
name:"xx",
age:"27",
sex:1
}
let arr = Reflect.ownKeys(obj)
console.log(arr) // ['name','age','key']
同样,从结果就能看出 ownKeys() 将目标对象中的所有属性都提取成一个单独的数组。
至于剩下的 API 建议大家去 MDN 上刷一遍。
地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect
刷完 API 后大家可以发现,对于对象的操作,用法上非常统一。不管是读取、删除,还是判断,Reflect 一律换成了 Reflect.api() 的这种结构。这样一改,瞬间就把之前乱七八糟的用法进行了管理和约定上的统一。
对于新手而言,这真是一个好消息。偷偷告诉大家,ECMAScript 也有意向要摒弃掉之前的 API, 虽然现在还给予保留,劝告小伙伴们,抓紧熟悉 Reflect,否则 Reflect 一旦大热,第一口螃蟹就真的不香了:)
本文首发公号:勾勾的前端世界
欢迎来和勾勾一起交流噢!!!
- 上一篇: 大救星:延展操作符,是如何运作的?
- 下一篇: 如何在页面关闭或跳转时优雅的发送Ajax请求
猜你喜欢
- 2024-11-23 「实战」用原生的 Intersection Observer API 实现 Lazy Loading
- 2024-11-23 JS:缓存数据用哪个?Storage有什么区别?
- 2024-11-23 JavaScript 中的 4 个相等比较算法的介绍
- 2024-11-23 如何在页面关闭或跳转时优雅的发送Ajax请求
- 2024-11-23 大救星:延展操作符,是如何运作的?
- 2024-11-23 vue3.0项目开发(三)新特性之响应式系统reactive函数
- 2024-11-23 自动驾驶规模落地,不能被激光雷达卡脖子
- 2024-11-23 JavaScript 有趣的冷知识:标签模板(tagged template)
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-