日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

reflect存在的意义和使用api

發布時間:2024/3/7 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 reflect存在的意义和使用api 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

es6提供了一個全新的api----reflectl,reflect和proxy是相對的,我們可以用reflect操作對象。

reflect存在的意義:

1,將object對象一些內部的方法,放到Reflect對象上。比如:object.defineProperty

說明:現階段這些方法存在于object和Reflect對象上,未來只存在于Reflect對象上。

意義:也就是說,從Reflect對象上可以拿到語言內部的方法。

2,操作對象時出現報錯返回false

說明:比如,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,讓操作對象的編程變為函數式編程

說明:老寫法有的是命令式編程,比如下面這個例子

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

4,保持和proxy對象的方法一一對應

說明:Reflect對象的方法與Proxy對象的方法一一對應,只要是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;} });

總結:綜上所述,Reflect對象有4個意義:

  • 從Reflect對象上可以拿到語言內部的方法。
  • 操作對象出現報錯時返回false
  • 讓操作對象都變為函數式編程
  • 保持和proxy對象的方法一一對象

Reflect常用api:

靜態方法:

Reflect對象一共有 13 個靜態方法。

  • Reflect.apply(target, thisArg, args)
  • Reflect.construct(target, args)
  • Reflect.get(target, name, receiver)
  • Reflect.set(target, name, value, receiver)
  • Reflect.defineProperty(target, name, desc)
  • Reflect.deleteProperty(target, name)
  • Reflect.has(target, name)
  • Reflect.ownKeys(target)
  • Reflect.isExtensible(target)
  • Reflect.preventExtensions(target)
  • Reflect.getOwnPropertyDescriptor(target, name)
  • Reflect.getPrototypeOf(target)
  • Reflect.setPrototypeOf(target, prototype)

以上方法具體實現請自行google

實例:觀察者實例實現:

const queuedObservers = new Set();const observe = fn => queuedObservers.add(fn); const observable = obj => new Proxy(obj, {set});function set(target, key, value, receiver) {const result = Reflect.set(target, key, value, receiver);queuedObservers.forEach(observer => observer());return result; }

?

?

總結

以上是生活随笔為你收集整理的reflect存在的意义和使用api的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。