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

JavaScript的Proxy對象詳解

 更新時間:2022年01月07日 15:26:57   作者:Learn-anything  
這篇文章主要為大家介紹了JavaScript的Proxy對象,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

一、Proxy 是什么?

Proxy 對象用于攔截并修改目標對象的指定操作。

// 語法
const p = new Proxy(target, handler)
  • target :目標對象(可以是任何類型的對象,包括原生數(shù)組,函數(shù),甚至另一個代理)。
  • handler :以函數(shù)作為屬性的對象,實現(xiàn)攔截和自定義操作。

二、怎么用?

1、使用 Proxy 的簡單實例

訪問不存在的屬性,設置默認值返回而不返回 undefined

// 1、找到合適的 handler 并編寫代碼
const handler = {
    get: function(obj, prop) {
        return prop in obj ? obj[prop] : 37;
    }
};
// 2、新建 Proxy 對象
const p = new Proxy({}, handler);
// 3、執(zhí)行操作
p.a = 1;
p.b = undefined;
// 4、查看結(jié)果
console.log(p.a, p.b);      // 1, undefined
console.log('c' in p, p.c); // false, 37

2、目標對象被正確修改

let target = {};
let p = new Proxy(target, {});
p.a = 37;   // 操作轉(zhuǎn)發(fā)到目標
console.log(target.a);    // 37. 操作已經(jīng)被正確地轉(zhuǎn)發(fā)

3、使用 set handler 做數(shù)據(jù)驗證

let validator = {
  set: function(obj, prop, value) {
    if (prop === 'age') {
      if (!Number.isInteger(value)) {
        throw new TypeError('The age is not an integer');
      }
      if (value > 200) {
        throw new RangeError('The age seems invalid');
      }
    }
    // The default behavior to store the value
    obj[prop] = value;
    // 表示成功
    return true;
  }
};
let person = new Proxy({}, validator);
person.age = 100;
console.log(person.age);
// 100
person.age = 'young';
// 拋出異常: Uncaught TypeError: The age is not an integer
person.age = 300;
// 拋出異常: Uncaught RangeError: The age seems invalid

4、擴展構(gòu)造函數(shù)

function extend(sup, base) {
  var descriptor = Object.getOwnPropertyDescriptor(
    base.prototype, "constructor"
  );
  base.prototype = Object.create(sup.prototype);
  var handler = {
    construct: function(target, args) {
      var obj = Object.create(base.prototype);
      this.apply(target, obj, args);
      return obj;
    },
    apply: function(target, that, args) {
      sup.apply(that, args);
      base.apply(that, args);
    }
  };
  var proxy = new Proxy(base, handler);
  descriptor.value = proxy;
  Object.defineProperty(base.prototype, "constructor", descriptor);
  return proxy;
}
var Person = function (name) {
  this.name = name
};
var Boy = extend(Person, function (name, age) {
  this.age = age;
});
Boy.prototype.sex = "M";
var Peter = new Boy("Peter", 13);
console.log(Peter.sex);  // "M"
console.log(Peter.name); // "Peter"
console.log(Peter.age);  // 13

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • 基于勻速運動的實例講解(側(cè)邊欄,淡入淡出)

    基于勻速運動的實例講解(側(cè)邊欄,淡入淡出)

    下面小編就為大家?guī)硪黄趧蛩龠\動的實例講解(側(cè)邊欄,淡入淡出)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 深入理解JavaScript事件機制

    深入理解JavaScript事件機制

    事件機制是幾乎所有開發(fā)語言都有的機制,并不是deviceone的獨創(chuàng),在某些語言稱之為消息(Event),有些地方稱之為(Message).接下來通過本文給大家介紹JS事件機制的理解 ,需要的朋友一起學習吧
    2023-04-04
  • JavaScript尾遞歸的實現(xiàn)及應用場景

    JavaScript尾遞歸的實現(xiàn)及應用場景

    本文主要介紹了JavaScript尾遞歸的實現(xiàn)及應用場景,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • echarts展示區(qū)域地圖添加紋理圖片操作指南

    echarts展示區(qū)域地圖添加紋理圖片操作指南

    這篇文章主要給大家介紹了關于echarts展示區(qū)域地圖添加紋理圖片操作的相關資料,ECharts地圖組件支持使用圖片作為地圖區(qū)域的填充紋理,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • 判斷ie的兩種簡單方法

    判斷ie的兩種簡單方法

    判斷ie想必大家都會寫吧,如何將判斷條件變得簡單呢,也許大家并不是很清楚,感興趣的大家可以參考下本文,或許會有所收獲
    2013-08-08
  • 用JS判別瀏覽器種類以及IE版本的幾種方法小結(jié)

    用JS判別瀏覽器種類以及IE版本的幾種方法小結(jié)

    用JS判別瀏覽器種類以及IE版本的幾種方法小結(jié),需要的朋友可以參考下。
    2011-08-08
  • 微信小程序調(diào)用支付接口的完整流程記錄

    微信小程序調(diào)用支付接口的完整流程記錄

    我們在做小程序支付相關的開發(fā)時,總會遇到這些難題,下面這篇文章主要給大家介紹了關于微信小程序調(diào)用支付接口的完整流程,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • 使用Axios攔截器優(yōu)化HTTP請求與響應的實踐案例

    使用Axios攔截器優(yōu)化HTTP請求與響應的實踐案例

    在前端開發(fā)中,HTTP 請求是與后端交互的重要方式,為了提高代碼的可維護性、復用性以及用戶體驗,使用 Axios 攔截器是非常常見的做法,本文將詳細介紹如何使用 Axios 的請求攔截器和響應攔截器,需要的朋友可以參考下
    2024-11-11
  • Three.Js實現(xiàn)看房自由小項目

    Three.Js實現(xiàn)看房自由小項目

    目前隨著元宇宙概念的爆火,THREE技術(shù)已經(jīng)深入到了物聯(lián)網(wǎng)、VR、游戲、數(shù)據(jù)可視化等多個平臺,今天我們主要基于THREE實現(xiàn)一個三維的VR看房小項目,感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • 動態(tài)的改變IFrame的高度實現(xiàn)IFrame自動伸展適應高度

    動態(tài)的改變IFrame的高度實現(xiàn)IFrame自動伸展適應高度

    動態(tài)的改變IFrame的高度,實現(xiàn)IFrame自動伸展,父頁面也自動神縮原理: 在IFrame子頁面一加載的時候,調(diào)用父IFrame對象,改變其高度
    2012-12-12

最新評論

正宁县| 习水县| 万荣县| 论坛| 宁津县| 营口市| 安丘市| 保靖县| 哈巴河县| 沈阳市| 松潘县| 双流县| 襄樊市| 齐河县| 元朗区| 灵宝市| 肃南| 阿坝| 许昌县| 临朐县| 江安县| 阿城市| 宿州市| 平乡县| 丽江市| 凤台县| 同德县| 大连市| 邓州市| 黄冈市| 廉江市| 阿城市| 东海县| 奉新县| 卢氏县| 巫溪县| 左贡县| 云龙县| 五家渠市| 玉溪市| 罗江县|