ES6之Reflect

一、概述

其設(shè)計(jì)目的如下:

  1. Object對(duì)象的一些明顯屬于語(yǔ)言內(nèi)部的方法(比如Object.defineProperty),放到Reflect對(duì)象上。
  2. 修改某些Object方法的返回結(jié)果,讓其變得更合理。
  3. Object操作都變成函數(shù)行為。
  4. Reflect對(duì)象的方法與Proxy對(duì)象的方法一一對(duì)應(yīng)。

二、靜態(tài)方法

1. Reflect.get(target, name, receiver)

查找并返回target對(duì)象的name屬性,如果沒(méi)有該屬性,則返回undefined

var myObject = {
  foo: 1,
  bar: 2,
  get baz() {
    return this.foo + this.bar;
  },
}
Reflect.get(myObject, 'foo') // 1

var myReceiverObject = {
  foo: 4,
  bar: 4,
};
Reflect.get(myObject, 'baz', myReceiverObject) // 8
2. Reflect.set(target, name, value, receiver)

設(shè)置target對(duì)象的name屬性等于value,this綁定receiver(可選)

3. Reflect.has(obj, name)

檢查obj中是否含有name屬性,返回布爾值

4. Reflect.deleteProperty(obj, name)

刪除obj中的name屬性,返回布爾值

5. Reflect.construct(target, args)

提供一種調(diào)用構(gòu)造函數(shù)的方法

function Greeting(name) {
  this.name = name;
}

// new 的寫(xiě)法
const instance = new Greeting('張三');

// Reflect.construct 的寫(xiě)法
const instance = Reflect.construct(Greeting, ['張三']);
6. Reflect.getPrototypeOf(obj)

用于讀取對(duì)象的proto屬性,對(duì)應(yīng)Object.getPrototypeOf(obj)

7. Reflect.setPrototypeOf(obj, newProto)

用于設(shè)置目標(biāo)對(duì)象(obj)的原型,對(duì)應(yīng)Object.setPrototypeOf(obj, newProto)

const myObj = {};

// 舊寫(xiě)法
Object.setPrototypeOf(myObj, Array.prototype);

// 新寫(xiě)法
Reflect.setPrototypeOf(myObj, Array.prototype);

myObj.length // 0
7. Reflect.apply(func, thisArg, args)

Function.prototype.apply.call(func, thisArg, args)方法的簡(jiǎn)化,用于綁定this對(duì)象后執(zhí)行給定函數(shù)。

const ages = [11, 33, 12, 54, 18, 96];

// 舊寫(xiě)法
const youngest = Math.min.apply(Math, ages);

// 新寫(xiě)法
const youngest = Reflect.apply(Math.min, Math, ages);
8. Reflect.defineProperty(target, propertyKey, attributes)

基本等同于Object.defineProperty,用來(lái)為對(duì)象定義屬性

9. Reflect.getOwnPropertyDescriptor(target, propertyKey)

基本等同于Object.getOwnPropertyDescriptor,用于得到指定屬性的描述對(duì)象

10. Reflect.isExtensible (target)

返回一個(gè)布爾值,表示當(dāng)前對(duì)象是否可擴(kuò)展

12. Reflect.preventExtensions(target)

用于讓一個(gè)對(duì)象變?yōu)椴豢蓴U(kuò)展

13. Reflect.ownKeys (target)

用于返回對(duì)象的所有屬性,基本等同于Object.getOwnPropertyNamesObject.getOwnPropertySymbols之和。

var myObject = {
  foo: 1,
  bar: 2,
  [Symbol.for('baz')]: 3,
  [Symbol.for('bing')]: 4,
};

// 舊寫(xiě)法
Object.getOwnPropertyNames(myObject)
// ['foo', 'bar']

Object.getOwnPropertySymbols(myObject)
//[Symbol(baz), Symbol(bing)]

// 新寫(xiě)法
Reflect.ownKeys(myObject)
// ['foo', 'bar', Symbol(baz), Symbol(bing)]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 Reflect 對(duì)象是一個(gè)全局的普通的對(duì)象。Reflect 的原型就是 Object。我們來(lái)驗(yàn)證下 Refl...
    前端_Fn閱讀 630評(píng)論 0 0
  • 本人自學(xué)es6已經(jīng)有一段時(shí)間了,只覺(jué)得有些時(shí)候很是枯燥無(wú)味, 時(shí)而又覺(jué)得在以后的職業(yè)生涯中會(huì)很有用,因?yàn)閑s6的很...
    可樂(lè)_37d3閱讀 1,660評(píng)論 0 0
  • Reflect對(duì)象是ES6為了操作對(duì)象提供的新的API,它為了實(shí)現(xiàn)將object對(duì)象上的一些明顯屬于語(yǔ)言內(nèi)部...
    我家的貓子在哪里閱讀 485評(píng)論 0 0
  • Reflect對(duì)象與Proxy對(duì)象一樣,也是 ES6 為了操作對(duì)象而提供的新 API。Reflect對(duì)象的設(shè)計(jì)目的...
    SunshineBrother閱讀 474評(píng)論 0 2
  • Object.defineProperty(obj, name, desc)在無(wú)法定義屬性時(shí),會(huì)拋出一個(gè)錯(cuò)誤,而R...
    恒星的背影閱讀 288評(píng)論 0 1

友情鏈接更多精彩內(nèi)容