国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JavaScript代理模式:如何實現(xiàn)對象的動態(tài)代理

這篇具有很好參考價值的文章主要介紹了JavaScript代理模式:如何實現(xiàn)對象的動態(tài)代理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

JavaScript代理模式

在JavaScript中,代理模式是一種常見的設(shè)計模式,它允許我們在不改變對象本身的情況下,通過代理對象來控制對象的訪問。代理模式可以用于實現(xiàn)緩存、權(quán)限控制、遠(yuǎn)程調(diào)用等功能。

代理模式的定義

代理模式是指在訪問對象時引入一定程度的間接性,因為這種間接性可以附加多種用途,所以代理模式是一種非常常用的設(shè)計模式。

代理模式的實現(xiàn)

在JavaScript中,我們可以使用Proxy對象來實現(xiàn)代理模式。Proxy對象是ES6中新增的一個對象,它可以用來代理另一個對象,攔截并改變該對象的默認(rèn)行為。

下面是一個簡單的例子,我們通過代理對象來控制對原始對象的訪問:

let target = {
  name: 'Tom',
  age: 18
};

let proxy = new Proxy(target, {
  get(target, key) {
    console.log(`get ${key}`);
    return target[key];
  },
  set(target, key, value) {
    console.log(`set ${key}=${value}`);
    target[key] = value;
  }
});

proxy.name; // 輸出:get name
proxy.age = 20; // 輸出:set age=20

在上面的例子中,我們創(chuàng)建了一個原始對象target,然后通過Proxy對象創(chuàng)建了一個代理對象proxy。代理對象proxy攔截了對原始對象target的訪問,并輸出了相應(yīng)的日志信息。

代理模式的應(yīng)用

代理模式在實際開發(fā)中有很多應(yīng)用場景,下面介紹其中的兩個:

緩存代理

緩存代理是指在訪問某個對象時,如果該對象已經(jīng)被訪問過,那么直接返回緩存中的數(shù)據(jù),否則執(zhí)行原始的訪問操作,并將結(jié)果緩存起來。

下面是一個簡單的例子,我們通過代理對象來實現(xiàn)緩存代理:

function createProxy(fn) {
  let cache = new Map();
  return new Proxy(fn, {
    apply(target, thisArg, args) {
      let key = args.join(',');
      if (cache.has(key)) {
        console.log(`get result from cache: ${cache.get(key)}`);
        return cache.get(key);
      } else {
        let result = target.apply(thisArg, args);
        cache.set(key, result);
        console.log(`set result to cache: ${result}`);
        return result;
      }
    }
  });
}

function add(a, b) {
  return a + b;
}

let proxy = createProxy(add);

proxy(1, 2); // 輸出:set result to cache: 3
proxy(1, 2); // 輸出:get result from cache: 3

在上面的例子中,我們通過createProxy函數(shù)創(chuàng)建了一個代理對象proxy,該代理對象攔截了對add函數(shù)的調(diào)用,并實現(xiàn)了緩存代理的功能。

權(quán)限控制代理

權(quán)限控制代理是指在訪問某個對象時,如果當(dāng)前用戶沒有權(quán)限訪問該對象,那么直接返回錯誤信息,否則執(zhí)行原始的訪問操作。

下面是一個簡單的例子,我們通過代理對象來實現(xiàn)權(quán)限控制代理:

let target = {
  name: 'Tom',
  age: 18
};

let proxy = new Proxy(target, {
  get(target, key) {
    if (key === 'age') {
      console.log(`access denied: ${key}`);
      return undefined;
    } else {
      console.log(`get ${key}`);
      return target[key];
    }
  }
});

proxy.name; // 輸出:get name
proxy.age; // 輸出:access denied: age

在上面的例子中,我們創(chuàng)建了一個原始對象target,然后通過Proxy對象創(chuàng)建了一個代理對象proxy。代理對象proxy攔截了對原始對象target的訪問,并實現(xiàn)了權(quán)限控制的功能。

總結(jié)

代理模式是一種非常常用的設(shè)計模式,它可以用于實現(xiàn)緩存、權(quán)限控制、遠(yuǎn)程調(diào)用等功能。在JavaScript中,我們可以使用Proxy對象來實現(xiàn)代理模式。文章來源地址http://www.zghlxwxcb.cn/news/detail-513897.html

到了這里,關(guān)于JavaScript代理模式:如何實現(xiàn)對象的動態(tài)代理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • java的動態(tài)代理如何實現(xiàn)

    java的動態(tài)代理如何實現(xiàn)

    jdkproxy動態(tài)代理必須基于接口(interface)實現(xiàn) 接口 UserInterface.java 原始實現(xiàn)類: UseServiceImpl.java 代理類 : UserProxyFactoryBJdk.java 執(zhí)行結(jié)果: before the name of 123is Austin after Cglib實現(xiàn)動態(tài)代理與JdkProxy不同, 是通過構(gòu)建繼承類實現(xiàn) 原始類 UseServiceImpl.java 代理類 : UserProxyFactoryByCglib.ja

    2024年02月09日
    瀏覽(23)
  • java基礎(chǔ)之Java的動態(tài)代理如何實現(xiàn)

    目錄 Java實現(xiàn)動態(tài)代理的兩種方式 兩種動態(tài)代理的區(qū)別 JDK 的動態(tài)代理是基于接口的代理。 CGLIB 是基于繼承的代理。 總結(jié) 補充 靜態(tài)代理和動態(tài)代理的區(qū)別 動態(tài)代理的用途 Spring AOP的實現(xiàn)方式 JDK 動態(tài)代理代碼示例 Cglib動態(tài)代理代碼示例 JDK動態(tài)代理 :Java.lang.reflect 包中的Pr

    2024年02月03日
    瀏覽(35)
  • JavaScript 設(shè)計模式之代理模式

    其實這種模式在現(xiàn)在很多地方也都有使用到,如 Vue3 中的數(shù)據(jù)相應(yīng)原理就是使用的 es6 中的 Proxy 代理及?Reflect 反射的方式來處理數(shù)據(jù)響應(yīng)式 我們?nèi)粘T谑褂脭?shù)據(jù)請求時,也會用到一些代理的方式,比如在請求不同的域名,端口等會出現(xiàn)跨域的情況,這時就需要用到代理去獲

    2024年02月19日
    瀏覽(23)
  • 設(shè)計模式之代理模式(靜態(tài)代理&動態(tài)代理)

    設(shè)計模式之代理模式(靜態(tài)代理&動態(tài)代理)

    目錄 1、什么是代理模式 2、代理模式的結(jié)構(gòu) 3、代理模式的實現(xiàn) 3.1 靜態(tài)代理和動態(tài)代理概念 3.2?靜態(tài)代理 3.3 動態(tài)搭理 3.3.1 代碼實現(xiàn) 3.3.2 Proxy類講解 4、動態(tài)代理VS靜態(tài)代理 5、代理模式優(yōu)缺點 由于某些原因需要給某對象提供一個代理以控制對該對象的訪問。這時,訪問對象

    2024年02月03日
    瀏覽(26)
  • JavaScript設(shè)計模式(四)——策略模式、代理模式、觀察者模式

    JavaScript設(shè)計模式(四)——策略模式、代理模式、觀察者模式

    個人簡介 ?? 個人主頁: 前端雜貨鋪 ???♂? 學(xué)習(xí)方向: 主攻前端方向,正逐漸往全干發(fā)展 ?? 個人狀態(tài): 研發(fā)工程師,現(xiàn)效力于中國工業(yè)軟件事業(yè) ?? 人生格言: 積跬步至千里,積小流成江海 ?? 推薦學(xué)習(xí):??前端面試寶典 ??Vue2 ??Vue3 ??Vue2/3項目實戰(zhàn) ??Node.js??

    2024年02月09日
    瀏覽(92)
  • 設(shè)計模式8:代理模式-動態(tài)代理

    上一篇:設(shè)計模式8:代理模式-靜態(tài)代理 “動態(tài)”的含義是 代碼生成代理類,一個代理類可以代理多個接口 。 動態(tài)區(qū)別于 死板 ,靜態(tài)代理中一個代理類只能代理一個接口,其他不同的接口,就需要再手寫不同的代理類,這就很 死板 。 動態(tài)代理類似于在安卓里面,我們常

    2024年02月09日
    瀏覽(31)
  • javascript設(shè)計模式-三種代理

    javascript設(shè)計模式-三種代理

    將抽象與實現(xiàn)隔離開來,以便二者獨立變化。常用于事件驅(qū)動的程序設(shè)計。有些地方它和適配器與門面很類似。下面是最簡單的橋接模式,但適配器是一種包裝器。門面一般是同一個類中方法的抽象和組合,而橋接通常是收集幾個類的。 這種方式也要注意使用場合,如果一個

    2024年01月20日
    瀏覽(17)
  • 代理模式--靜態(tài)代理和動態(tài)代理

    代理模式--靜態(tài)代理和動態(tài)代理

    定義:代理模式就是代替對象具備真實對象的功能,并代替真實對象完成相應(yīng)的操作并且在不改變真實對象源代碼的情況下擴展其功能,在某些情況下,?個對象不適合或者不能直接引?另?個對象,?代理對象可以在客戶端和?標(biāo)對象之間起到中介的作? 使用代理模式可以

    2024年02月15日
    瀏覽(24)
  • 代理模式——對象的間接訪問

    代理模式——對象的間接訪問

    由于某些原因,客戶端不想或不能直接訪問某個對象,此時可以通過一個被稱為“代理”的第三者來實現(xiàn)間接訪問,該方案對應(yīng)的設(shè)計模式被稱為代理模式。 代理模式是一種應(yīng)用很廣泛的結(jié)構(gòu)型設(shè)計模式,而且變化很多。在代理模式中引入了一個新的代理對象,代理對象可以

    2024年02月14日
    瀏覽(16)
  • 溫故知新之:代理模式,靜態(tài)代理和動態(tài)代理(JDK動態(tài)代理)

    溫故知新之:代理模式,靜態(tài)代理和動態(tài)代理(JDK動態(tài)代理)

    代理模式可以在不修改被代理對象的基礎(chǔ)上,通過擴展代理類,進行一些功能的附加與增強。 靜態(tài)代理 是一種代理模式的實現(xiàn)方式,它在編譯期間就已經(jīng)確定了代理對象,需要為每一個被代理對象創(chuàng)建一個代理類。靜態(tài)代理的實現(xiàn)比較簡單,但是每個被代理對象都需要創(chuàng)建

    2024年02月11日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包