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

ES6知識(shí)點(diǎn)整理之Proxy的應(yīng)用實(shí)例詳解

 更新時(shí)間:2019年04月16日 08:46:38   作者:Johnny丶me  
這篇文章主要介紹了ES6知識(shí)點(diǎn)整理之Proxy的應(yīng)用,結(jié)合實(shí)例形式詳細(xì)分析了ES6中Proxy的功能、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了ES6知識(shí)點(diǎn)整理之Proxy的應(yīng)用。分享給大家供大家參考,具體如下:

Proxy 用于修改對(duì)象某些操作的默認(rèn)行為,可以對(duì)外界的訪問(wèn)進(jìn)行過(guò)濾和改寫(xiě),其概念類似于元編程。

Proxy 讓我們可以對(duì)任何對(duì)象的絕大部分行為進(jìn)行監(jiān)聽(tīng)和干涉,實(shí)現(xiàn)更多的自定義程序行為。在目標(biāo)對(duì)象之前架設(shè)一層“攔截”,外界對(duì)該對(duì)象的訪問(wèn),都必須先通過(guò)這層攔截。

目前【兼容性】存在一定的問(wèn)題,目前在chrome和ff瀏覽器中的非嚴(yán)格模式下可用,一些先進(jìn)的技術(shù)即使在目前不能廣泛應(yīng)用,但隨著時(shí)間的流逝,都將會(huì)進(jìn)入程序員日常的編程中。

注: 博客整理時(shí)間:2018-03-24 16:21:15

初識(shí)Proxy

var obj = {name:'Joh'};
var proxy = new Proxy(obj, {
 get (target, key) {
  return 'test1';
 },
 set (target, key, value) {
  target[key] = value
 }
});
console.log(proxy.name); // test1 進(jìn)行g(shù)et取值
proxy.name = 'test2'; // 進(jìn)行set設(shè)置
console.log(obj.name); // test2

通過(guò)Proxy對(duì)象進(jìn)行攔截target對(duì)象的屬性

完整的使用Proxy進(jìn)行設(shè)置, 獲取,修改和刪除的案例

var obj = {name:'Joh',group:'g1',_type:'student'};
var proxy = new Proxy(obj, {
 get (target, key) {
  if(key[0]!== '_') {
   // return Reflect.get(target,key); // 效果等同于下面的return語(yǔ)句
   return target[key];
  };
 },
 set (target, key, value) {
  if(key[0]!== '_') {
   // Reflect.set(target,key,value);
   return target[key] = value;
  }
 },
 deleteProperty(target, key) {
  // 業(yè)務(wù)邏輯
  if(key[0] !== '_') {
   // Reflect.deleteProperty(target, key);
   delete target[key];
  }
 }
});
console.log(proxy.name); // Joh
console.log(obj.name); // Joh
proxy.name = 'Lily'; // 在非嚴(yán)格模式下的賦值操作,嚴(yán)格模式將會(huì)報(bào)錯(cuò)
console.log(obj.name); // Lily
delete proxy.name; // 未能成功刪除,因?yàn)樯厦鎯?nèi)部有判斷
console.log(obj.name); // undefined 成功刪除
delete proxy.group;
console.log(obj.group); // undefined 成功刪除
delete proxy._type;
console.log(obj._type); // student
proxy.color='red';
console.log(obj.color); // red

其中借助Reflect實(shí)現(xiàn)和直接實(shí)現(xiàn)的效果等同

通過(guò)has方法和in關(guān)鍵字進(jìn)行攔截的示例:

var obj = {name:"Joh",_name:"Lily"};
var proxy = new Proxy(obj, {
 has(target, key) {
  if(key[0] === '_'){
   return false;
  } else {
   return key in target;
  }
 }
});
console.log('has name attr: ', 'name' in proxy); // has name attr: true
console.log('has _name attr: ', '_name' in proxy); // has _name attr: false

使用ownKeys方法與for-in遍歷過(guò)濾符合特定規(guī)則屬性的示例

var obj = {name:"Joh",_name:"Lily", age:10, group:"g1"};
var proxy = new Proxy(obj, {
 ownKeys (target) {
  return Reflect.ownKeys(target).filter(key => key[0] !== '_');
 }
});
for(var k in proxy) {
 console.log(k); // 分別輸出 name age group 過(guò)濾了 _name
}

通過(guò)apply方法對(duì)函數(shù)調(diào)用的攔截

function test() {
 console.log('hello world');
}
var proxyFun = new Proxy(test,{
 apply(target,ctx,args) {
  console.log('proxy apply');
  return Reflect.apply(target,ctx,args);
 }
});
proxyFun(); // 分別輸出 proxy apply 和 hello world
// proxyFun.apply(); // 同樣,分別輸出 proxy apply 和 hello world
// proxyFun.call(); // 同樣,分別輸出 proxy apply 和 hello world

通過(guò)construct方法對(duì)構(gòu)造函數(shù)實(shí)例化的攔截

function User() {
 console.log('this is a contructor');
}
var ClassProxy = new Proxy(User, {
 construct(target,args) {
  console.log('proxy construct');
  return Reflect.construct(target,args);
 }
});
new ClassProxy(); // 分別輸出 proxy construct 和 this is a contructor

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JS中一些高效的魔法運(yùn)算符總結(jié)

    JS中一些高效的魔法運(yùn)算符總結(jié)

    這篇文章主要給阿加介紹了關(guān)于JS中一些高效的魔法運(yùn)算符,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 一文詳解JavaScript普通函數(shù)與箭頭函數(shù)的本質(zhì)區(qū)別與使用場(chǎng)景

    一文詳解JavaScript普通函數(shù)與箭頭函數(shù)的本質(zhì)區(qū)別與使用場(chǎng)景

    作為前端開(kāi)發(fā)者,我們每天都在和各種函數(shù)打交道,ES6引入的箭頭函數(shù)讓JavaScript的函數(shù)世界更加豐富多彩,但你真的了解它們之間的區(qū)別嗎?今天,我就來(lái)為大家詳細(xì)剖析普通函數(shù)與箭頭函數(shù)的那些事兒,感興趣的朋友跟著小編一起來(lái)看看吧
    2025-05-05
  • js簡(jiǎn)單實(shí)現(xiàn)Select互換數(shù)據(jù)的方法

    js簡(jiǎn)單實(shí)現(xiàn)Select互換數(shù)據(jù)的方法

    這篇文章主要介紹了js簡(jiǎn)單實(shí)現(xiàn)Select互換數(shù)據(jù)的方法,涉及javascript動(dòng)態(tài)操作select中option節(jié)點(diǎn)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • JS如何讓你的移動(dòng)端交互體驗(yàn)更加優(yōu)秀

    JS如何讓你的移動(dòng)端交互體驗(yàn)更加優(yōu)秀

    現(xiàn)在在手機(jī)等移動(dòng)端設(shè)備訪問(wèn)的人越來(lái)越多,我們前端開(kāi)發(fā)者一直致力于將設(shè)計(jì)稿還原成頁(yè)面,供用戶訪問(wèn)。但除高度還原設(shè)計(jì)稿外,交互上的良好體驗(yàn)也是我們應(yīng)該做到的。
    2021-05-05
  • 禁止空格提交表單的js代碼

    禁止空格提交表單的js代碼

    只要有文本框的地方按下回車鍵就會(huì)自動(dòng)刷新.最后終于找到了解決的方法在此與大家分享下,感興趣的朋友不要錯(cuò)過(guò)
    2013-11-11
  • Bootstrap標(biāo)簽頁(yè)(Tab)插件切換echarts不顯示問(wèn)題的解決

    Bootstrap標(biāo)簽頁(yè)(Tab)插件切換echarts不顯示問(wèn)題的解決

    這篇文章主要給大家介紹了關(guān)于Bootstrap標(biāo)簽頁(yè)(Tab)插件切換echarts不顯示問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 手機(jī)平板等移動(dòng)端適配跳轉(zhuǎn)URL的js代碼

    手機(jī)平板等移動(dòng)端適配跳轉(zhuǎn)URL的js代碼

    這篇文章主要為大家分享下手機(jī)平板等移動(dòng)端適配跳轉(zhuǎn)URL的js代碼,需要的朋友可以參考下
    2014-01-01
  • JS實(shí)現(xiàn)HTML標(biāo)簽轉(zhuǎn)義及反轉(zhuǎn)義

    JS實(shí)現(xiàn)HTML標(biāo)簽轉(zhuǎn)義及反轉(zhuǎn)義

    本文主要介紹了JS實(shí)現(xiàn)HTML標(biāo)簽轉(zhuǎn)義及反轉(zhuǎn)義的方法。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • JavaScript動(dòng)態(tài)提示輸入框輸入字?jǐn)?shù)的方法

    JavaScript動(dòng)態(tài)提示輸入框輸入字?jǐn)?shù)的方法

    這篇文章主要介紹了JavaScript動(dòng)態(tài)提示輸入框輸入字?jǐn)?shù)的方法,實(shí)例分析了javascript針對(duì)頁(yè)面元素的動(dòng)態(tài)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 基于vue實(shí)現(xiàn)可搜索下拉框定制組件

    基于vue實(shí)現(xiàn)可搜索下拉框定制組件

    這篇文章主要為大家詳細(xì)介紹了基于vue實(shí)現(xiàn)可搜索下拉框定制組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論

原阳县| 茂名市| 平定县| 务川| 察哈| 邹城市| 滕州市| 隆子县| 塘沽区| 五河县| 怀远县| 郯城县| 新丰县| 高唐县| 黑山县| 平凉市| 会宁县| 靖远县| 来凤县| 织金县| 莱州市| 平遥县| 武胜县| 瑞金市| 扎鲁特旗| 新建县| 牡丹江市| 广西| 博白县| 汾西县| 永济市| 什邡市| 吴桥县| 浠水县| 维西| 岐山县| 乌兰县| 鄱阳县| 高陵县| 南投县| 北碚区|