国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES6:Reflect

pinecone / 2116人閱讀

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

Reflect

概述。

Relflect對象與Proxy對象一樣,也是ES6為了操作對象而提供的新的API。Reflect對象的設計目的有幾個。
(1)將Object對象的一些明顯屬于語言內部的方法(比如Obejcet.defineProperty),放到Reflect對象上。現階段,某些方法同時在Object喝Reflect對象上部署,未來的新方法將只部署在Reflect對象上。也就是說,從reflect對象上可以拿到語言內部的方法。
(2)修改某些Object方法的返回結果,讓其變得更合理。比如,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操作都變成函數行為。某些Object操作是命令式,比如name in obj和delete obj[name],而Reflect.has(obj,name)和Reflect.deleteProperty(obj,name)讓它們變成了函數行為。

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

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

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),內部都調用對應的Reflect方法,保證原生行為能夠正常執行。添加的工作,就是將每一個操作輸出一行日志。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101708.html

相關文章

  • ES6Reflect

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

    Mr_houzi 評論0 收藏0
  • es6基礎0x021:反射

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

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

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

    wzyplus 評論0 收藏0
  • ES6學習筆記4-Proxy、Reflect、Decorator、Module

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

    lushan 評論0 收藏0
  • ES6Reflect

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

    BingqiChen 評論0 收藏0

發表評論

0條評論

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