欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

注: 博客整理時間:2018-03-24 16:21:15

初識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

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

完整的使用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語句
   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)格模式將會報(bào)錯
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)的效果等同

通過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ī)則屬性的示例

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 過濾了 _name
}

通過apply方法對函數(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

通過construct方法對構(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錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

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

相關(guān)文章

  • JS設(shè)置網(wǎng)頁圖片vspace和hspace屬性的方法

    JS設(shè)置網(wǎng)頁圖片vspace和hspace屬性的方法

    這篇文章主要介紹了JS設(shè)置網(wǎng)頁圖片vspace和hspace屬性的方法,具體分析了vspace和hspace屬性的功能及javascript修改技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 微信小程序?qū)W習(xí)總結(jié)(一)項(xiàng)目創(chuàng)建與目錄結(jié)構(gòu)分析

    微信小程序?qū)W習(xí)總結(jié)(一)項(xiàng)目創(chuàng)建與目錄結(jié)構(gòu)分析

    這篇文章主要介紹了微信小程序?qū)W習(xí)總結(jié)(一)項(xiàng)目創(chuàng)建與目錄結(jié)構(gòu),總結(jié)分析了微信小程序項(xiàng)目創(chuàng)建、配置方法以及目錄結(jié)構(gòu)、文件功能,需要的朋友可以參考下
    2020-06-06
  • 深入理解ES6的迭代器與生成器

    深入理解ES6的迭代器與生成器

    本篇文章主要介紹了深入理解ES6的迭代器與生成器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • JS中的回調(diào)函數(shù)實(shí)例淺析

    JS中的回調(diào)函數(shù)實(shí)例淺析

    這篇文章主要介紹了JS中的回調(diào)函數(shù),結(jié)合實(shí)例形式簡單分析了javascript回調(diào)函數(shù)的感念、功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-03-03
  • javascript動畫之模擬拖拽效果篇

    javascript動畫之模擬拖拽效果篇

    其實(shí)javascript本身是具有原生拖放功能的,但是由于兼容性問題,以及功能實(shí)現(xiàn)的方式,用的不是很廣泛。javascript動畫廣泛使用的還是模擬拖拽。本文將詳細(xì)介紹javascript的模擬拖拽,有需要的可以參考借鑒。
    2016-09-09
  • js實(shí)現(xiàn)表單Radio切換效果的方法

    js實(shí)現(xiàn)表單Radio切換效果的方法

    這篇文章主要介紹了js實(shí)現(xiàn)表單Radio切換效果的方法,涉及javascript實(shí)現(xiàn)頁面元素的隱藏與顯示及復(fù)選框的遍歷技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 完美解決JS文件頁面加載時的阻塞問題

    完美解決JS文件頁面加載時的阻塞問題

    下面小編就為大家?guī)硪黄昝澜鉀QJS文件頁面加載時的阻塞問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 微信小程序?qū)崿F(xiàn)留言板功能

    微信小程序?qū)崿F(xiàn)留言板功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)留言板功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • js簡單抽獎代碼

    js簡單抽獎代碼

    年底了各個公司都有抽獎活動,我也寫了一個超級簡單的代碼來實(shí)現(xiàn)抽獎效果,這里沒有華麗的Css3效果,但卻有短小精悍的js代碼。
    2015-01-01
  • JavaScript 組件之旅(二)編碼實(shí)現(xiàn)和算法

    JavaScript 組件之旅(二)編碼實(shí)現(xiàn)和算法

    話說上期我們討論了隊(duì)列管理組件的設(shè)計(jì),并且給它取了個響亮而獨(dú)特的名字:Smart Queue. 這次,我們要將之前的設(shè)計(jì)成果付諸實(shí)踐,用代碼來實(shí)現(xiàn)它。
    2009-10-10

最新評論