编程技术文章分享与教程

网站首页 > 技术文章 正文

API 终结者——杀手 Reflect

hmc789 2024-11-23 16:25:46 技术文章 3 ℃

嗨,我是你稳定更新、干货超级多的勾勾。

在我们学习 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 一旦大热,第一口螃蟹就真的不香了:)


本文首发公号:勾勾的前端世界

欢迎来和勾勾一起交流噢!!!

Tags:

标签列表
最新留言