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

首頁 > 語言 > JavaScript > 正文

JS裝飾器函數用法總結

2024-05-06 15:19:52
字體:
來源:轉載
供稿:網友

在 ES6 中增加了對類對象的相關定義和操作(比如 class 和 extends ),這就使得我們在多個不同類之間共享或者擴展一些方法或者行為的時候,變得并不是那么優雅。這個時候,我們就需要一種更優雅的方法來幫助我們完成這些事情。

什么是裝飾器

Python 的裝飾器

在面向對象(OOP)的設計模式中,decorator被稱為裝飾模式。OOP的裝飾模式需要通過繼承和組合來實現,而Python除了能支持 OOP 的 decorator 外,直接從語法層次支持 decorator。

如果你熟悉 python 的話,對它一定不會陌生。那么我們先來看一下 python 里的裝飾器是什么樣子的吧:

def decorator(f):  print "my decorator"  return f@decoratordef myfunc():  print "my function"myfunc()# my decorator# my function

這里的 @decorator 就是我們說的裝飾器。在上面的代碼中,我們利用裝飾器給我們的目標方法執行前打印出了一行文本,并且并沒有對原方法做任何的修改。代碼基本等同于:

def decorator(f):  def wrapper():    print "my decorator"    return f()  return wrapperdef myfunc():  print "my function"myfunc = decorator(myfuc)

通過代碼我們也不難看出,裝飾器 decorator 接收一個參數,也就是我們被裝飾的目標方法,處理完擴展的內容以后再返回一個方法,供以后調用,同時也失去了對原方法對象的訪問。當我們對某個應用了裝飾以后,其實就改變了被裝飾方法的入口引用,使其重新指向了裝飾器返回的方法的入口點,從而來實現我們對原函數的擴展、修改等操作。

ES7 的裝飾器

ES7 中的 decorator 同樣借鑒了這個語法糖,不過依賴于 ES5 的 Object.defineProperty 方法 。

Object.defineProperty

Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 并返回這個對象。

該方法允許精確添加或修改對象的屬性。通過賦值來添加的普通屬性會創建在屬性枚舉期間顯示的屬性(for...in 或 Object.keys 方法), 這些值可以被改變,也可以被刪除。這種方法允許這些額外的細節從默認值改變。默認情況下,使用 Object.defineProperty() 添加的屬性值是不可變的。

語法

Object.defineProperty(obj, prop, descriptor)
    obj:要在其上定義屬性的對象。 prop:要定義或修改的屬性的名稱。 descriptor:將被定義或修改的屬性描述符。 返回值:被傳遞給函數的對象。

在ES6中,由于 Symbol類型 的特殊性,用 Symbol類型 的值來做對象的key與常規的定義或修改不同,而Object.defineProperty 是定義 key為 Symbol 的屬性的方法之一。

屬性描述符

對象里目前存在的屬性描述符有兩種主要形式:數據描述符和存取描述符。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 育儿| 布尔津县| 关岭| 阿鲁科尔沁旗| 达孜县| 清丰县| 同江市| 奇台县| 溧阳市| 开远市| 清徐县| 东丽区| 康保县| 峨边| 横山县| 荔波县| 泸溪县| 商丘市| 宁化县| 桦甸市| 防城港市| 醴陵市| 浑源县| 武安市| 黑龙江省| 武冈市| 郁南县| 平武县| 浦东新区| 牟定县| 山东省| 那坡县| 辰溪县| 鄄城县| 武宁县| 乌兰县| 南靖县| 庆云县| 甘德县| 睢宁县| 康平县|