ES6 Reflect

分享

简单谈谈

Reflect:反射,语言层面上的内容,在 ES6 中其出现的目的主要有以下几个:

  • Object 下属于语言内部的方法,放到 Reflect 上,让 Object 更加纯粹。
  • 修正之前在 Object 下的一些方法的返回值不合理照成的逻辑混乱。
  • 将命令式的行为变成函数行为,如: name in obj ==> Reflect.has(obj, name)
  • Proxy 下的方法一一对应,Proxy 可以更方便的完成默认行为的调用。

拥有的方法

目前一共有 13 个方法,与 Proxy 下的方法一一对应,直接调用这些方法就完成了 Proxy 默认的行为。

  • Reflect.apply(target, ctx, args)
  • Reflect.construct(target, args)
  • Reflect.get(target, key, receiver)
  • Reflect.set(target, key, value, receiver)
  • Reflect.defineProperty(target, key, desc)
  • Reflect.deleteProperty(target, key)
  • Reflect.has(target, key)
  • Reflect.ownKeys(target)
  • Reflect.isExtensible(target)
  • Reflect.preventExtensions(target)
  • Reflect.getOwnPropertyDescriptor(target, key)
  • Reflect.getPrototypeOf(target)
  • Reflect.setPrototypeOf(target, prototype)

其作用与 Proxy 中的差不多,只不过一个进行拦截,一个进行操作。

参考

阅读更多

ES6 Proxy

简单谈谈 Proxy:在目标对象之前架设一层 拦截 ,当对该对象进行 访问/赋值 时,必须先通过这层拦截,从而实现对属性进行 访问/赋值 时的过滤和改写。 一个简单的例子 let obj = new Proxy({}, { get(target, key, receiver) { console.log(`getting ${key}!`); return Reflect.get(target, key, receiver); }, set(target, key, value, receiver) { console.log(`setting ${key}!`); return Reflect.set(target, key, value, receiver); } }); obj.count

By Breeze

ES6 变量解构

简单说说 假设有这样一个场景:你需要向你的服务器获取一些基本的数据(config 对象)来初始化页面。当你需要去获取其中的配置项时, ES5 是这么写的: var config = { params1: 520, params2: 1314 }; // 为了确保下方的代码不依赖于 config 对象,重新赋值为一个更有意义的名称。 var params1 = config.params1, params2 = config.params2 console.log(params1 + ' !! ' + params2) // 520 !! 1314 看着代码量也不是很大,但这只有两个配置项,万一要有几十个呢,不得一直 congif.xxx 了。不得不得这的确很烦,那有没更简单的方式呢? ES6 提出了以下方式: var config = { params1: 520, params2:

By Breeze

ES6 Array

简单谈谈 ES5 中原本就提供了数组,这里谈谈数组下都有哪些方法新增,哪些方法进行了变更。 Array.from 在 javascript 中有这样一类的存在:类数组,它不是数组,却能像数组那么操作,如下便是一个类数组结构。 let arrayLike = { "0": "a", "1": "b", "2": "c", length: 3 }; 类数组结构:可以像数组那样取值、 for 循环,但是却不能适用数组 forEach/splice 等数组特定的方法,在 ES5 中必须使用一些特殊的方法来将一个类数组结构转化成数组,而在 ES6 中,

By Breeze