国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

ES6中Proxy與Reflect實現重載(overload)的方法

2019-11-19 16:58:24
字體:
來源:轉載
供稿:網友

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

Proxy與Reflect實現重載(overload)

從語法角度講JavaScript不支持重載。原因很簡單,JS中函數可以傳入任意類型、任意個數的參數,通通可以通過在函數內使用this.arguments獲得。這樣,就無法實現同名函數參數列表不同實現不同功能。當然,在實際使用過程中,可以人為去檢測傳入實參的個數及類型,來進行不同操作。但是,我認為這不能叫做重載。

ES6帶來了Proxy和Reflect,配合使用可以實現重載。Proxy用于修改某些操作的默認行為,相當于對原始想進行的操作進行“包裝”;Reflect對象的方法與Proxy對象的方法一一對應,這使得Proxy對象可以方便的調用對應的Reflect方法完成默認行為。我們可以這樣使用它們:

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 mvar s = overload.m; //getting m

看到了沒,是不是很有意思,新創建的Proxy對象overload可以完成目標對象message的操作,同時,可以通過在默認操作之前自定義一些其他操作。我認為,這更像Java里的重載。

那么Proxy與Reflect有哪些實例方法呢?

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

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

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

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

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

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

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

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

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

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

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

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

希望本文所述對大家ECMAScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌什县| 杭锦旗| 海南省| 通许县| 乳山市| 肃南| 昌江| 林芝县| 晋城| 醴陵市| 当雄县| 扎赉特旗| 治多县| 武冈市| 阿勒泰市| 靖江市| 沾益县| 同江市| 康保县| 凤冈县| 九龙城区| 平原县| 梁平县| 安阳县| 利川市| 获嘉县| 桐乡市| 南陵县| 庆城县| 兴山县| 丹江口市| 苏尼特右旗| 惠水县| 盐池县| 平定县| 全州县| 新乡市| 孝感市| 象州县| 大悟县| 南川市|