返回:数组的 iterator 方法,默认情况下与 values() 返回值相同。
arr.flatten(depth)
定义:会递归到指定深度将所有子数组连接,并返回一个新数组。
参数:depth 可选指定嵌套数组中的结构深度,默认值为1。
返回:一个将子数组连接的新数组。
arr.flatMap(function callback(currentValue[, index[, array]]) { // 返回新数组的元素}[, thisArg])
定义:首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 和 深度值1的 flatten 几乎相同,但flatMap通常在合并成一种方法的效率稍微高一些。
返回:一个新的数组,其中每个元素都是回调函数的结果,并且结构深度 depth 值为1。
Proxy && Reflect
Proxy是一个构造函数(对对象的访问进行拦截),Reflect(操作对象提供的API)。
Reflect它与Proxy对象的方法是一一对应的,这就让Proxy对象可以方便地调用对应的Reflect方法,完成默认行为,作为修改行为的基础。
Proxy
Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。
Proxy方法:target参数表示所要拦截的目标对象,handler参数也是一个对象,用来定制拦截行为 var proxy = new Proxy(target, handler); var person = { name: "张三" }; var proxy = new Proxy(person, { get: function(target, property) { if (property in target) { return target[property]; } else { throw new ReferenceError("Property \"" + property + "\" does not exist."); } } }); proxy.name // "张三" proxy.age // 抛出一个错误
Proxy使用详解
Reflect
将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现阶段,某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect对象上。也就是说,从Reflect对象上可以拿到语言内部的方法。
// 下列方法说明:target为目标对象,name为某个属性,receiver为如果name属性设置了赋值函数,则为函数的this指向
Reflect.apply(target, thisArg, args)
Reflect.apply方法等同于Function.prototype.apply.call(func, thisArg, args),用于绑定this对象后执行给定函数。
Reflect.construct(target, args)
Reflect.construct方法等同于new target(…args),这提供了一种不使用new,来调用构造函数的方法。