中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

當前位置: 首頁 / 技術干貨 / 正文
vue3.0中使用的proxy,不了解怎么漲薪

2023-02-02

   proxy 對象

  前言

  現在vue3.0雖然沒有大規模使用在項目中,但面試的時候問的可一點也不少.特別是vue中雙向數據綁定,幾乎必問.但vue2.0和vue3.0的數據綁定還是不一樣的....

  一、vue2.x的雙向數據綁定

  · 在Vue2.x中,雙向數據綁定是通過Object.definePropert實現的.

  · 用get,set方法中通過發布訂閱者模式來實現的數據響應。

  · 但它只能監聽存在的屬性,對于新增或刪除的便無能無力.

  · 同時數組的改變他也是沒有辦法監聽的.

  二、proxy的使用

  1.proxy是個什么玩意

  · ES6中新增的代理反射,可以然讓我們攔截一些操作,且添加其它的能力.

  · 簡單說,我們對某個對象設置攔截器后,它的一些操作就能被我們捕獲到,如此我們可以按照需求對默認的行為進行修改或者其它操作.

  · 類似于常見的鉤子函數,發生某個行為時,觸發某個鉤子函數.

  2.基本形式

  語法

  const proxy = new Proxy(target, handler)

  · target: 要監聽的對象,可以是一個對象,數組,函數等等

  · handler: 是對象,里面包含了可以監聽target的方法.

  · proxy為返回的新對象, 為了能夠觸發handler里面的函數,必須要使用返回值去進行其他操作,比如修改值.handler里面的方法可以有以下這十三個,每一個都對應的一種或多種針對proxy代理對象的操作行為

  支持的寫法

  Proxy提供了十三種攔截對象操作的方法,這里只介紹幾個vue3中常用到的,更多的請參考MDN

  1. handler.get()當通過proxy去讀取對象里面的屬性的時候,會進入到get鉤子函數里面.

  2. handler.set當通過proxy去為對象設置修改屬性的時候,會進入到set鉤子函數里面

  3. handler.has當使用in判斷屬性是否在proxy代理對象里面時,會觸發has,比如

  const obj = {

  name: '小甜甜'

  }

  console.log('name' in obj)

  3. handler.apply當proxy監聽的是一個函數的時候,當調用這個函數時,會進入apply鉤子函數

  4. handler.construct當使用new操作符的時候,會進入construct這個鉤子函數

  5. handler.defineProperty當使用Object.defineProperty去修改屬性修飾符的時候,會進入這個鉤子函數

  3.常用API

  Reflect 對象

  const target = {

  id:'target'

  }

  const handler ={

  // 捕獲器在處理程序時,以方法名為鍵

  get(){

  return 'handle override';

  }

  }

  const proxy = new Proxy(target,handler);

  console.log(target.id); // target

  console.log(proxy.id); // handle override

  · 以上方法中,是基于參數,重建操作,可不是所有的捕獲器行為都像get這么簡單

  · 我們可以通過Reflect對象上的同名方法,來繼續當前的默認行為.

  const target = {

  id:'target'

  }

  const handler ={

  // 捕獲器在處理程序時,以方法名為鍵

  get(){

  //Reflect上的同名方法 繼續原來的操作

  return Reflect.get(...arguments);

  }

  }

  const proxy = new Proxy(target,handler);

  console.log(target.id); // target

  console.log(proxy.id); // target

  · 操作符的替代

  Reflect.get() 替代對象屬性訪問操作符號.

  Reflect.set() 替代= 賦值操作符,返回 bool值

  Reflect.has() 替代in操作符或者with()

  Reflect.deleteProperty() 替代delete操作符

  Reflect.constructor() 替代new操作符

  代理捕獲器和反射方法

  對于代理對象上的任何一種操作,只會有一個捕獲處理器被調用.

  1. get() 在獲取屬性值,操作時調用.對應反射API為Reflect.get()

  const target = {

  id:'target'

  }

  const handler ={

  // 捕獲器在處理程序時,以方法名為鍵

  get(){

  console.log('get()被調用');

  return Reflect.get(...arguments);

  }

  }

  const proxy = new Proxy(target,handler);

  proxy.foo; // get()被調用

  2. set() 捕獲器會在設置屬性時調用,對應反射API為Reflect.set()

  const target = {

  id:'target'

  }

  const handler ={

  // 捕獲器在處理程序時,以方法名為鍵

  set(target,property,value,receiver){

  console.log('set()被調用');

  return Reflect.set(...arguments);

  }

  }

  const proxy = new Proxy(target,handler);

  proxy.foo = 'bar';

  //target 為目標對象

  // property 為屬性

  // value 為屬性值

  // receiver 接收最初賦值對象

  · apply() 會在調用函數時被調用,對應的反射api為Reflect.apply()

  const fn = ()=>{

  }

  const proxy = new Proxy(fn,{

  apply(target,thisArg,...argumentsList){

  console.log('apply()');

  return Reflect.apply(...arguments)

  }

  })

  proxy(); // apply

  · construct() 會在new操作符時被調用;

  const fn = function(){

  }

  const proxy = new Proxy(fn,{

  // target必須為構造函數

  construct(target,argumentList,newTarget){

  console.log('construct');

  return Reflect.construct(...arguments)

  }

  })

  new proxy();

  4.使用場景

  a. 隱藏屬性,

  將目標對象上的屬性進行隱藏.

  const hiddenProperites = ['foo','bar'];

  const tarObject = {

  foo:1,

  bar:2,

  baz:3

  };

  const proxy = new Proxy(tarObject,{

  get(target,property){

  if(hiddenProperites.includes(property)){

  return undefined;

  }else{

  return Reflect.get(...arguments)

  }

  },

  has(target,property){

  if(hiddenProperites.includes(property)){

  return false;

  }else{

  return Reflect.has(...arguments)

  }

  }

  });

  console.log(proxy.foo); // undefined

  console.log(proxy.baz); // 3

  console.log('foo' in proxy); // false

  console.log('baz' in proxy); // true

  b 屬性驗證

  所有的賦值操作都會觸發set,我們可以所賦的值決定是允許還是拒絕.

  const target = {

  num:0

  }

  const proxy = new Proxy(target,{

  set(target,property,value){

  // 是number 類型才允許賦值

  if(typeof value !== 'number'){

  return false;

  }else{

  return Reflect.set(...arguments)

  }

  }

  });

  proxy.num = 2;

  console.log(proxy); // Proxy {num: 2}

  proxy.num = 'abc';

  console.log(proxy); // Proxy {num: 2}

  c 構造函數必須傳參

  和保護和驗證對象的屬性相似,我們也可以對構造函數的參數進行審查.

  // 類必須傳遞參數

  class User{

  constructor(id) {

  this._id = id;

  }

  }

  const proxy = new Proxy(User,{

  construct(target,argumentsList,newTarget){

  if(argumentsList[0]===undefined){

  throw '必須傳遞參數'

  }else{

  return Reflect.construct(...arguments);

  }

  }

  })

  new proxy(); // Uncaught 必須傳遞參數

  d 對象的可觀察

  向數組中每插入一個值,emit方法就會收到消息

  const userList = [];

  // 接收傳遞的值

  function emit(newValue){

  console.log(newValue);

  }

  const proxy = new Proxy(userList,{

  set(target,property,value,receiver){

  const result = Reflect.set(...arguments)

  if(result){

  // 設置值時,調用emit方法

  emit(Reflect.get(target,property,receiver));

  }

  return result;

  }

  });

  proxy.push('小甜甜');

  三、總結

  · 代理是由你創建的特殊對象,它封裝另一個普通對象,或者誰擋在普通對象前面.

  · 可以在代理對象上注冊特殊的處理函數,代理商執行各種操作時就會調用這個程序.

  · 這些程序除了把操作轉發給原始目標/被封對象外,還會執行其它額外操作.

分享: 更多

上一篇:Sitespeed使用教程

下一篇:Hive的分區表

好程序員公眾號

  • · 剖析行業發展趨勢
  • · 匯聚企業項目源碼

好程序員開班動態

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數據+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發 <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數據分析 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓IT培訓
在線咨詢
IT培訓IT培訓
試聽
IT培訓IT培訓
入學教程
IT培訓IT培訓
立即報名
IT培訓

Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號

中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

            ㊣最新国产の精品bt伙计久久| 在线视频综合导航| 日本一区二区三区在线不卡| 99在线精品免费| 亚洲图片有声小说| 精品久久久网站| 不卡在线观看av| 亚洲r级在线视频| 久久亚洲捆绑美女| 欧美主播一区二区三区| 久国产精品韩国三级视频| 中文字幕中文在线不卡住| 欧美日韩精品免费观看视频| 国产酒店精品激情| 亚洲第四色夜色| 中文字幕欧美日韩一区| 欧美另类一区二区三区| 国产成人综合网| 日韩黄色免费网站| ●精品国产综合乱码久久久久| 日韩一级片在线观看| 色一情一乱一乱一91av| 国产一区在线观看视频| 午夜精品久久久久久久99水蜜桃 | 欧美电影免费观看高清完整版在线 | 日韩视频免费观看高清完整版| 成人一区二区在线观看| 五月激情丁香一区二区三区| 国产精品久久久久久久久搜平片| 欧美电影在线免费观看| 色欧美日韩亚洲| 成人夜色视频网站在线观看| 青青国产91久久久久久| 一区二区三区在线播放| 国产精品九色蝌蚪自拍| 亚洲精品在线电影| 777a∨成人精品桃花网| 色哟哟日韩精品| 不卡一区在线观看| 国产盗摄一区二区| 久久av资源网| 男女视频一区二区| 亚洲bdsm女犯bdsm网站| 一区二区国产视频| 亚洲色图一区二区| 国产精品久久久久久久久果冻传媒| 精品欧美乱码久久久久久| 91精品国产综合久久国产大片| 欧洲国内综合视频| 一本久久综合亚洲鲁鲁五月天| 成人午夜碰碰视频| 成人免费电影视频| 粉嫩aⅴ一区二区三区四区| 极品美女销魂一区二区三区| 免费久久精品视频| 麻豆传媒一区二区三区| 秋霞国产午夜精品免费视频| 日韩精品欧美精品| 免费在线一区观看| 蜜桃一区二区三区在线观看| 欧美a级一区二区| 日本大胆欧美人术艺术动态| 免费在线一区观看| 久久99国产精品久久99果冻传媒| 六月丁香综合在线视频| 久久99久久99精品免视看婷婷| 久久99最新地址| 国产精品一区专区| 成人黄色一级视频| 色综合欧美在线视频区| 欧美婷婷六月丁香综合色| 欧美日韩国产美| 精品人伦一区二区色婷婷| 久久天天做天天爱综合色| 中文在线免费一区三区高中清不卡| 国产精品天干天干在观线| 亚洲桃色在线一区| 午夜精品久久久久久久| 久久99国产精品久久| 成人理论电影网| 在线精品亚洲一区二区不卡| 欧美日韩在线播放一区| 欧美成人vps| 国产精品嫩草影院com| 亚洲自拍偷拍九九九| 奇米影视在线99精品| 国产99久久久国产精品潘金| 色婷婷综合在线| 欧美一区二区大片| 中文在线资源观看网站视频免费不卡 | 国模无码大尺度一区二区三区 | 在线观看91视频| 久久精品欧美日韩精品| 国产性做久久久久久| 亚洲一区二区在线播放相泽| 男男视频亚洲欧美| 成人av资源站| 337p亚洲精品色噜噜狠狠| 日本一区二区三级电影在线观看| 亚洲三级免费电影| 日本午夜一本久久久综合| 粉嫩一区二区三区性色av| 欧美色综合久久| 国产亚洲婷婷免费| 午夜视频久久久久久| 丁香激情综合国产| 91麻豆精品国产91久久久久久久久 | 一区二区三区在线视频播放 | 懂色中文一区二区在线播放| 欧美日韩亚洲国产综合| 欧美高清在线视频| 青椒成人免费视频| 色视频成人在线观看免| 久久久久国产精品厨房| 亚州成人在线电影| 成人av在线资源网| 精品国产免费一区二区三区四区 | 性做久久久久久免费观看欧美| 懂色一区二区三区免费观看| 日韩亚洲欧美成人一区| 亚洲精品乱码久久久久久久久| 国产一区二区福利| 日韩一区二区免费电影| 亚洲午夜影视影院在线观看| 成人福利在线看| 久久午夜色播影院免费高清| 日韩国产高清影视| 欧美在线短视频| 亚洲视频一二三| 成人久久18免费网站麻豆| 欧美精品一区二| 蜜桃久久精品一区二区| 欧美顶级少妇做爰| 日日摸夜夜添夜夜添精品视频| 色婷婷av一区二区三区软件| 国产精品国产三级国产aⅴ中文| 国产一区欧美日韩| 精品国内二区三区| 久久精品国产亚洲5555| 欧美一区二区三区成人| 日本女人一区二区三区| 欧美精品亚洲二区| 五月天精品一区二区三区| 欧美日韩另类一区| 亚洲成人动漫精品| 欧美日韩一区二区三区高清 | 有坂深雪av一区二区精品| 97se亚洲国产综合自在线| 国产精品久久国产精麻豆99网站| 国产91在线观看丝袜| 久久精品视频在线免费观看| 国产在线精品一区二区不卡了| 国产色产综合色产在线视频| 精品亚洲国内自在自线福利| 精品国产91亚洲一区二区三区婷婷| 麻豆91精品视频| 精品久久久久久久人人人人传媒 | a级高清视频欧美日韩| 国产精品伦理一区二区| a4yy欧美一区二区三区| 亚洲欧美视频在线观看| 欧美影院一区二区| 同产精品九九九| 日韩一级片在线播放| 国产综合久久久久影院| 国产色一区二区| 94-欧美-setu| 亚洲国产毛片aaaaa无费看| 91精品国产综合久久久蜜臀粉嫩| 美女视频黄 久久| 久久久久久久久99精品| 99久久精品免费看国产免费软件| 亚洲欧美电影一区二区| 在线成人午夜影院| 黑人巨大精品欧美黑白配亚洲| 国产欧美一二三区| 91久久奴性调教| 美女在线观看视频一区二区| 国产三级三级三级精品8ⅰ区| 99国产精品久久久久久久久久久| 亚洲电影第三页| 久久久一区二区| 91久久国产综合久久| 久久99久久精品| 亚洲精品日日夜夜| 精品久久久久香蕉网| 91麻豆蜜桃一区二区三区| 免费成人在线影院| 中文字幕一区av| 日韩一区二区三区电影在线观看| 国产超碰在线一区| 午夜婷婷国产麻豆精品| 日本一区二区成人| 91精品国产综合久久小美女| 成人一级片在线观看| 日本欧美一区二区三区| 国产精品白丝在线| 精品少妇一区二区三区免费观看| 一本一道综合狠狠老| 九色综合狠狠综合久久|