最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

5分鐘快速看懂ES6中的反射與代理

 更新時(shí)間:2019年12月19日 14:46:23   作者:麗塔y  
這篇文章主要給大家介紹了如何通過5分鐘快速看懂ES6中的反射與代理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ES6具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

反射:Reflect

反射到底是個(gè)什么東西?

它的本質(zhì)就是一個(gè)對(duì)象(JS內(nèi)置的),里邊有一些函數(shù)可供調(diào)用。

為什要叫做反射?

因?yàn)樗茏龅氖虑?,和其他語(yǔ)言(Java、python等)中的反射很相似。其他語(yǔ)言中都叫做反射了,那就共鳴(降低學(xué)習(xí)成本?)

反射能做什么事情呢?

let animal = {
 name: "dog",
 age: 3
}
Reflect.get(animal, "name") // 傳參為:對(duì)象, 屬性名
// 等同于:
animal.name 

let say = function (type, sound) {
 console.log(`${type}的叫聲是${sound}`)
}
Reflect.apply(say, null, ["貓", "喵喵"]) // 傳參為:函數(shù), this指向, 實(shí)參列表
// 等同于:
say("貓", "喵喵")

經(jīng)過以上代碼我們深刻的發(fā)現(xiàn)Reflect好像沒什么用,非要說(shuō)些什么的話,他把我們以前的基本操作(比如:obj.name)用調(diào)用函數(shù)的方式實(shí)現(xiàn)了一遍。對(duì)了這就是它的意義:減少JS語(yǔ)言魔法,讓代碼更加純粹。

怎么說(shuō)?

JS語(yǔ)言魔法:我們的操作看起來(lái)不太合理,超乎尋常,難以解釋。

解釋一波,Reflect.get(animal, "name")你看著個(gè)代碼它又寬又長(zhǎng),看著好像我們要得到 animal 這個(gè)對(duì)象中 name 這個(gè)屬性的值的意思。

再看看animal.name 震驚!只需要這樣,就得到了對(duì)象中的屬性的值,雖然學(xué)習(xí)過JS的伙伴們覺得很正常,但是我們不太能用語(yǔ)言去描述這段代碼做了什么,這就是語(yǔ)言魔法的意思。

想必大家已經(jīng)對(duì)反射有一定了解了,Reflect對(duì)象上還有一些其他方法。大家可以看文檔研究一下怎么用,

代理:Proxy

代理到底是個(gè)什么東西?

我們都聽過什么代理商、還有代理服務(wù)器之類的。比如哪代理服務(wù)器來(lái)說(shuō),我們不能直接訪問到服務(wù)器,我們必須要去訪問代理服務(wù)器,由代理服務(wù)器代替我們?nèi)ピL問服務(wù)器,服務(wù)器返回的數(shù)據(jù),也要先返回給代理服務(wù)器,再由代理服務(wù)器返回給我們。

ES6中的代理也是這個(gè)意思,我們可以去代理一個(gè)對(duì)象類型的數(shù)據(jù)(函數(shù)、對(duì)象等),然后我們?cè)偃ピL問對(duì)象時(shí),訪問代理就好了。

為啥我們要訪問代理?

因?yàn)榇韺?duì)象給我們提供了修改底層實(shí)現(xiàn)的方式,也就是說(shuō)我們可以在代理對(duì)象上進(jìn)行一些操作,為我們?cè)L問對(duì)象制定一些規(guī)則。就像代理服務(wù)器可以過濾某些對(duì)服務(wù)器的訪問等功能。

怎么操作?

Proxy的本質(zhì)是一個(gè)構(gòu)造函數(shù),

new Proxy(obj, {
 // 一些規(guī)則
})

這樣我們就構(gòu)造出了一個(gè)obj對(duì)象的一個(gè)代理對(duì)象,第二個(gè)參數(shù)是一個(gè)對(duì)象它為訪問obj對(duì)象制定了一些規(guī)章制度。

new Proxy(obj, {
 get(target, prop){
  // some code
  return Reflect.get(target, prop)
 }
})

這就是在創(chuàng)建代理對(duì)象是制定規(guī)則的場(chǎng)景,對(duì)比一下Reflect,是不是很想呢。確實(shí)反射經(jīng)常配合Proxy使用

應(yīng)用:

比如:

function sum(num1, num2){
 return num1 + num2;
}

現(xiàn)在我們?yōu)閟um函數(shù)的傳參制定一些規(guī)則:參數(shù)必需是number類型的

const sunProxy = new Proxy(sum, {
 apply(target, thisArgument, arguments) {
  arguments.forEach(item => {
   typeof item !== "number" && throw("參數(shù)類型非number")
  })
  return Reflect.apply(target, thisArgument, arguments)
 }
})
sunProxy(23, 32)

封裝一下,搞一個(gè)通用類型出來(lái)

function funcProxy(func, ...types) 
 //執(zhí)行完這個(gè)函數(shù)返回一個(gè)函數(shù)的代理,剩余參數(shù)是我們規(guī)定的傳參類型
  return new Proxy(func, {
  apply(target, thisArgument, argumentsList) {
   types.forEach((type, index) => {
   // 循環(huán)判斷每一項(xiàng)參數(shù)類型是否合法
    typeof argumentsList[index] !== type && throw("傳參類型不符合")
      }
     })
   return Reflect.apply(target, thisArgument, argumentsList);
    }
   })
  }

然后:

const sumProxy = funcProxy(sum, "number", "number")
sumProxy(3, 5);

使用反射我們可以實(shí)現(xiàn)一些底層操作,代理可以為我們的調(diào)用制定規(guī)則。

是不是很有趣呢大家。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 老生常談ES6中的類

    老生常談ES6中的類

    下面小編就為大家?guī)?lái)一篇老生常談ES6中的類。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-07-07
  • Node.js開發(fā)指南中的簡(jiǎn)單實(shí)例(mysql版)

    Node.js開發(fā)指南中的簡(jiǎn)單實(shí)例(mysql版)

    工作原因需要用到nodejs,于是找到了《node.js開發(fā)指南》這本書來(lái)看看,作者BYVoid 為清華大學(xué)計(jì)算機(jī)系的高材生,年紀(jì)竟比我還小一兩歲,中華地廣物博真是人才輩出,佩服
    2013-09-09
  • JS基于遞歸算法實(shí)現(xiàn)1,2,3,4,5,6,7,8,9倒序放入數(shù)組中的方法

    JS基于遞歸算法實(shí)現(xiàn)1,2,3,4,5,6,7,8,9倒序放入數(shù)組中的方法

    這篇文章主要介紹了JS基于遞歸算法實(shí)現(xiàn)1,2,3,4,5,6,7,8,9倒序放入數(shù)組中的方法,涉及JS遞歸算法操作數(shù)組實(shí)現(xiàn)排序功能的相關(guān)技巧,需要的朋友可以參考下
    2017-01-01
  • js讀取cookie方法總結(jié)

    js讀取cookie方法總結(jié)

    這篇文章主要介紹了js讀取cookie方法,實(shí)例總結(jié)了四種常用的讀取方法,包含了對(duì)cookie數(shù)據(jù)的分割與遍歷操作,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • List Information About the Binary Files Used by an Application

    List Information About the Binary Files Used by an Applicati

    List Information About the Binary Files Used by an Application...
    2007-06-06
  • 微信小程序如何實(shí)現(xiàn)在線客服功能

    微信小程序如何實(shí)現(xiàn)在線客服功能

    這篇文章主要介紹了微信小程序如何實(shí)現(xiàn)在線客服功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • JavaScript對(duì)象與數(shù)組的幾種常見復(fù)制方法

    JavaScript對(duì)象與數(shù)組的幾種常見復(fù)制方法

    在 JavaScript 開發(fā)中,對(duì)象和數(shù)組的復(fù)制是一個(gè)非常常見的操作,無(wú)論是函數(shù)參數(shù)傳遞、狀態(tài)管理,還是避免不必要的副作用,了解和掌握各種復(fù)制方式至關(guān)重要,我們將系統(tǒng)梳理 JavaScript 中的幾種常見復(fù)制方法,并對(duì)其應(yīng)用場(chǎng)景進(jìn)行詳細(xì)說(shuō)明,需要的朋友可以參考下
    2024-10-10
  • js電話號(hào)碼驗(yàn)證方法

    js電話號(hào)碼驗(yàn)證方法

    JS電話號(hào)碼驗(yàn)證是比較常的一種驗(yàn)證,下邊給出一個(gè)JavaScript驗(yàn)證電話號(hào)碼的小例子。國(guó)內(nèi)固定電話都是七位或8位的數(shù)字組成的,還可以帶有長(zhǎng)途的區(qū)號(hào)。
    2015-09-09
  • js 發(fā)布訂閱模式的實(shí)例講解

    js 發(fā)布訂閱模式的實(shí)例講解

    下面小編就為大家?guī)?lái)一篇js 發(fā)布訂閱模式的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就想給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-09-09
  • JavaScript事件處理的方式(三種)

    JavaScript事件處理的方式(三種)

    最近這段時(shí)間因?yàn)槊刻煲薷木W(wǎng)站,為網(wǎng)站做特效,所以看了很多的js接觸事件,自己只會(huì)使用一小部分,有時(shí)用的時(shí)候也比較混亂,現(xiàn)在系統(tǒng)的整理了一下,特此分享到腳本之家平臺(tái)供大家參考下
    2016-04-04

最新評(píng)論

新乡县| 紫阳县| 澜沧| 南城县| 偃师市| 利辛县| 绥宁县| 沙洋县| 新泰市| 黄冈市| 铜山县| 灵寿县| 滦南县| 彩票| 东港市| 新绛县| 东源县| 县级市| 南郑县| 高台县| 和政县| 承德县| 刚察县| 若羌县| 雷州市| 灌南县| 华阴市| 区。| 焉耆| 姚安县| 巫山县| 勃利县| 施甸县| 句容市| 平武县| 贡山| 辉南县| 沈丘县| 石嘴山市| 清水县| 图们市|