欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ES6中Proxy與Reflect實(shí)現(xiàn)重載(overload)的方法

 更新時(shí)間:2017年03月30日 14:29:59   作者:柒青衿  
這篇文章主要介紹了ES6中Proxy與Reflect實(shí)現(xiàn)重載(overload)的方法,分析了重載的原理及使用Proxy和Reflect來實(shí)現(xiàn)重載的操作步驟與相關(guān)技巧,需要的朋友可以參考下

本文實(shí)例講述了ES6中Proxy與Reflect實(shí)現(xiàn)重載(overload)的方法。分享給大家供大家參考,具體如下:

Proxy與Reflect實(shí)現(xiàn)重載(overload)

從語(yǔ)法角度講JavaScript不支持重載。原因很簡(jiǎn)單,JS中函數(shù)可以傳入任意類型、任意個(gè)數(shù)的參數(shù),通通可以通過在函數(shù)內(nèi)使用this.arguments獲得。這樣,就無法實(shí)現(xiàn)同名函數(shù)參數(shù)列表不同實(shí)現(xiàn)不同功能。當(dāng)然,在實(shí)際使用過程中,可以人為去檢測(cè)傳入實(shí)參的個(gè)數(shù)及類型,來進(jìn)行不同操作。但是,我認(rèn)為這不能叫做重載。

ES6帶來了Proxy和Reflect,配合使用可以實(shí)現(xiàn)重載。Proxy用于修改某些操作的默認(rèn)行為,相當(dāng)于對(duì)原始想進(jìn)行的操作進(jìn)行“包裝”;Reflect對(duì)象的方法與Proxy對(duì)象的方法一一對(duì)應(yīng),這使得Proxy對(duì)象可以方便的調(diào)用對(duì)應(yīng)的Reflect方法完成默認(rèn)行為。我們可以這樣使用它們:

function LogMessage( m ){
  this.m = m;
}
var message = new LogMessage( 1 );
var overload = new Proxy(message , {
  get: function(target, key, receiver){
    console.log(`getting ${key}`);
    return Reflect.get(target , key , receiver);
  },
  set: function(target, key, value, receiver){
    console.log(`setting ${key}`);
    return Reflect.set(target, key, value, receiver);
  }
});
overload.m = 2; //setting m
var s = overload.m; //getting m

看到了沒,是不是很有意思,新創(chuàng)建的Proxy對(duì)象overload可以完成目標(biāo)對(duì)象message的操作,同時(shí),可以通過在默認(rèn)操作之前自定義一些其他操作。我認(rèn)為,這更像Java里的重載。

那么Proxy與Reflect有哪些實(shí)例方法呢?

1.get()
用于攔截某個(gè)屬性的讀取操作。

2.set()
用于攔截某個(gè)屬性的賦值操作。

3.has()
可以隱藏某些屬性,不被in操作符遍歷到。

4.construct()
用于攔截new命令。

5.deleteProperty()
用于攔截delete操作。

6.defineProperty()
用于攔截Object.defineProperty操作。

7.enumerate()
用于攔截for...in循環(huán)。

8.getOwnPropertyDescriptor()
用于攔截Object.getOwnPropertyDescriptor操作。

9.isExtensible()
用于攔截Object.isExtensible操作。

10.preventExtensions()
用于攔截Object.preventExtensions操作。

11.setPrototypeOf()
用于攔截Object.setPrototypeOf操作。

上面很多方法不是很常用,如果感興趣可以去查查相關(guān)資料

希望本文所述對(duì)大家ECMAScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 微信JSSDK上傳圖片

    微信JSSDK上傳圖片

    做過微信開發(fā)的都知道,在部分android機(jī)型里微信不支持網(wǎng)頁(yè)上傳圖片的,這是由于這些機(jī)型的文件上傳存在內(nèi)存泄漏,會(huì)導(dǎo)致微信閃退,所以微信內(nèi)置瀏覽器將文件上傳屏蔽,本篇文章給大家介紹使用微信jssdk如何上傳圖片,需要的朋友可以關(guān)注下
    2015-08-08
  • 28個(gè)JS常用數(shù)組方法總結(jié)

    28個(gè)JS常用數(shù)組方法總結(jié)

    最近面試有道題是至少寫出 15 個(gè)數(shù)組方法,數(shù)組方法平時(shí)經(jīng)常用到的也就6-7個(gè),突然要一下子寫出15個(gè),還是有點(diǎn)卡殼了,今天整理一波,需要的可以參考一下
    2022-05-05
  • JavaScript獲取某一天所在的星期

    JavaScript獲取某一天所在的星期

    我們會(huì)遇到的需求是,獲取今天或者某一天所在星期的開始和結(jié)束日期。今天小編通過實(shí)例代碼給大家分享JavaScript獲取某一天所在的星期,感興趣的朋友跟隨小編一起看看吧
    2019-09-09
  • 詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法

    詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法

    這篇文章主要介紹了詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • prototype與jquery下Ajax實(shí)現(xiàn)的差別

    prototype與jquery下Ajax實(shí)現(xiàn)的差別

    Ajax技術(shù)在web中應(yīng)用的相當(dāng)廣泛,最近項(xiàng)目需要用到Ajax,由于主站所用的是Jquey,而某個(gè)欄目的開發(fā)用的是prototype,這樣一來就必須對(duì)JS代碼做調(diào)整了。
    2009-09-09
  • JS實(shí)現(xiàn)數(shù)組淺拷貝和深拷貝的方法

    JS實(shí)現(xiàn)數(shù)組淺拷貝和深拷貝的方法

    淺拷貝創(chuàng)建一個(gè)新的對(duì)象,來接受重新復(fù)制或引用的對(duì)象值,如果對(duì)象屬性是基本的數(shù)據(jù)類型,復(fù)制的就是基本類型的值給新對(duì)象,這篇文章主要介紹了js實(shí)現(xiàn)數(shù)組淺拷貝和深拷貝,需要的朋友可以參考下
    2024-01-01
  • firefox TBODY 用js顯示和隱藏時(shí)出現(xiàn)錯(cuò)位的解決方法

    firefox TBODY 用js顯示和隱藏時(shí)出現(xiàn)錯(cuò)位的解決方法

    今天幫別人寫一個(gè)網(wǎng)頁(yè),發(fā)現(xiàn):當(dāng)用javascript動(dòng)態(tài)設(shè)置tr.style.display = "block"顯示某行時(shí),使用IE瀏覽沒有問題,但使用firefox瀏覽時(shí)該行被移到了其它行的后面,很是詫異。
    2008-12-12
  • 微信小程序開發(fā)之你可能沒有踩過的神坑總結(jié)

    微信小程序開發(fā)之你可能沒有踩過的神坑總結(jié)

    最近在做一個(gè)小程序的項(xiàng)目,所以記錄下開發(fā)過程中遇到的坑,這篇文章主要給大家介紹了關(guān)于微信小程序開發(fā)之你可能沒有踩過的神坑,需要的朋友可以參考下
    2021-09-09
  • 最新評(píng)論