成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ES6:Reflect

pinecone / 2124人閱讀

摘要:對象的設(shè)計目的有幾個?,F(xiàn)階段,某些方法同時在喝對象上部署,未來的新方法將只部署在對象上。修改某些方法的返回結(jié)果,讓其變得更合理。它采用方法將值賦值給對象的屬性,確保完成原有的行為,然后再部署額外的功能。

Reflect

概述。

Relflect對象與Proxy對象一樣,也是ES6為了操作對象而提供的新的API。Reflect對象的設(shè)計目的有幾個。
(1)將Object對象的一些明顯屬于語言內(nèi)部的方法(比如Obejcet.defineProperty),放到Reflect對象上。現(xiàn)階段,某些方法同時在Object喝Reflect對象上部署,未來的新方法將只部署在Reflect對象上。也就是說,從reflect對象上可以拿到語言內(nèi)部的方法。
(2)修改某些Object方法的返回結(jié)果,讓其變得更合理。比如,Object.defineProperty(obj,name,desc)在無法定義屬性時,會拋出一個錯誤,而Reflect.defineProperty(obj,name,desc)則會返回false。

//老寫法
try{
    Object.defineProperty(target,property,attributes);
    //success
}catch(e){
    //failure
}

//新寫法
if(Reflect.defineProperty(target,property,attributes)){
    //success
}else{
    //failure
}

(3)讓Object操作都變成函數(shù)行為。某些Object操作是命令式,比如name in obj和delete obj[name],而Reflect.has(obj,name)和Reflect.deleteProperty(obj,name)讓它們變成了函數(shù)行為。

//老寫法
"assign" in Object//true
//新寫法
Reflect.has(Object,"assign")//true

(4)Reflect對象的方法與Proxy對象的方法一一對應(yīng),只要是Proxy對象的方法,就能在Reflect對象上找到對應(yīng)的方法。這就讓Proxy對象可以方便地調(diào)用對應(yīng)的Reflect方法,完成默認(rèn)行為,作為修改行為的基礎(chǔ)。也就是說,不管Proxy怎么修改默認(rèn)行為,你總可以在Reflect上獲取默認(rèn)行為。

Proxy(target, {
  set: function(target, name, value, receiver) {
    var success = Reflect.set(target,name, value, receiver);
    if (success) {
      console.log("property " + name + " on " + target + " set to " + value);
    }
    return success;
  }
});

上面代碼中,Proxy方法攔截target對象的屬性賦值行為。它采用Reflect.set方法將值賦值給對象的屬性,確保完成原有的行為,然后再部署額外的功能。
下面是另一個例子。

var loggedObj = new Proxy(obj, {
  get(target, name) {
    console.log("get", target, name);
    return Reflect.get(target, name);
  },
  deleteProperty(target, name) {
    console.log("delete" + name);
    return Reflect.deleteProperty(target, name);
  },
  has(target, name) {
    console.log("has" + name);
    return Reflect.has(target, name);
  }
});

上面代碼中,每一個Proxy對象的攔截操作(getdeletehas),內(nèi)部都調(diào)用對應(yīng)的Reflect方法,保證原生行為能夠正常執(zhí)行。添加的工作,就是將每一個操作輸出一行日志。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101708.html

相關(guān)文章

  • ES6Reflect

    摘要:出現(xiàn)的目的把對象中的一些明顯屬于語言內(nèi)部的方法,放到對象上,比如。修改某些方法的返回結(jié)果,讓其變得合理。在無法定義屬性時,會拋出一個錯誤,而則會返回讓操作變成函數(shù)行為。某些操作時命令式的比如和,而和讓他們變成函數(shù)行為。 Reflect出現(xiàn)的目的 1.把Object對象中的一些明顯屬于語言內(nèi)部的方法,放到Reflect對象上,比如Object.defineProperty。就是說可以把R...

    Mr_houzi 評論0 收藏0
  • es6基礎(chǔ)0x021:反射

    摘要:概述反射說起來和上一章節(jié)的代理基本一樣,只是使用的方式不同,設(shè)計理念也不同。 0x000 概述 反射說起來和上一章節(jié)的代理基本一樣,只是使用的方式不同,設(shè)計理念也不同。 反射提供了一系列的靜態(tài)函數(shù),可以使用Reflect.function_name(...prams)調(diào)用,這一系列的方法和代理的處理器對象方法一致 0x001 apply 語法 Reflect.apply(targ...

    booster 評論0 收藏0
  • ES6 中的 Reflect 和 Proxy

    摘要:是中新增的特性。首先來說,的提出是為了整合之前中存在的一些不太合理的地方。表示當(dāng)前對象是否可擴(kuò)展,返回一個布爾值。更完美的枚舉很多代碼使用字符串普通或凍結(jié)的對象作為枚舉。通過記錄這些訪問和修改信息,能記錄下對這個對象的所有操作記錄。 Reflect Reflect 是ES6中新增的特性。它是一個普通對象,下面有13個靜態(tài)方法(enumerate在最終的發(fā)布版中被移除),可以再全局下訪問...

    wzyplus 評論0 收藏0
  • ES6學(xué)習(xí)筆記4-Proxy、Reflect、Decorator、Module

    摘要:攔截實例作為構(gòu)造函數(shù)調(diào)用的操作,比如。方法等同于,這提供了一種不使用,來調(diào)用構(gòu)造函數(shù)的方法。方法對應(yīng),返回一個布爾值,表示當(dāng)前對象是否可擴(kuò)展。這是的一個提案,目前轉(zhuǎn)碼器已經(jīng)支持。別名或修飾器在控制臺顯示一條警告,表示該方法將廢除。 Proxy Proxy 這個詞的原意是代理,用在這里表示由它來代理某些操作,可以譯為代理器,即用自己的定義覆蓋了語言的原始定義。ES6 原生提供 Proxy...

    lushan 評論0 收藏0
  • ES6Reflect

    摘要:查找并返回對象的屬性例例屬性部署了讀取函數(shù)返回的是的參數(shù)對象注意如果的第一個參數(shù)不是對象,則會報錯。它返回一個布爾值,表示是否操作成功用于返回對象的所有屬性使用和實現(xiàn)觀察者模式請參考觀察者模式 1、什么是Reflect?為操作對象而提供的新API 2、為什么要設(shè)計Reflect?(1)將Object對象的屬于語言內(nèi)部的方法放到Reflect對象上,即從Reflect對象上拿Object...

    BingqiChen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<