1. 程式人生 > >es6(基礎十五) Proxy(代理)

es6(基礎十五) Proxy(代理)

一、理解

    源物件
    代理(攔截)
    操作
    //打個比方
    批發衣服:相當於供應商
    代理商(張先生)

    使用者(買)

二、使用(攔截)

get():攔截物件屬性的讀取
set():攔截物件屬性的設定

deleteProperty():攔截刪除物件key操作

//源物件
let obj = {
	names:"衣服",
	times:"2017年1月1日",
	str:"這衣服還行",
	_r: 123
}
//建立代理
let personZ = new Proxy(obj,{
	// 攔截物件屬性的讀取
	get(target,key){
		//對值進行替換
		return target[key].replace("2017", "2018");
		//或者設定是否可讀取
		/*if(key=="times"){
			return false;
		}else{
			return target[key];
		}*/
	},
	// 攔截物件設定屬性
	set(target,key,val){
		//設定為只允許修改 str
		if(key=='str'){
			return target[key] = val;
		}else{
			return target[key]
		}
	},
	// 攔截 key in object 操作
    has(target, key) {
    	//只能獲取到names
        if (key === 'names') {
            return target[key]
        } else {
            return false;
        }
    },
    // 刪除屬性操作
	deleteProperty(target,key){
		// 存在下劃線 也就是 _r 允許刪除
		if(key.indexOf('_') > -1){
			delete target[key];
            return true;
		}else{
			return target[key];
		}
	},
	/**
     * 攔截
     * Object.keys
     * Object.getOwnPropertySymbols()
     * Object.getOwnPropertyNamess()
     *
     */
    ownKeys(target){
        return Object.keys(target).filter(
            item => item !== 'times'
        )
    }
})
// 1. get 攔截測試
console.log('get', personZ.times);//get 2018年1月1日
// 2. set 攔截測試
personZ.times = "2019";//時間無法修改
personZ.str = '修改成功';
console.log('set', personZ);
//set Proxy {names: "衣服", times: "2017年1月1日", str: "修改成功", _r: 123}
// 3. has 攔截測試
console.log('has', 'names' in personZ,'times' in personZ);//has true false
// 4. 刪除操作
delete personZ.times;
console.log('delete',personZ);
//delete Proxy {names: "衣服", times: "2017年1月1日", str: "修改成功", _r: 123}
delete personZ._r;
console.log('delete',personZ);
//delete Proxy {names: "衣服", times: "2017年1月1日", str: "修改成功"}
// 5. ownKeys
console.log('own',Object.keys(personZ))
//own (2) ["names", "str"]

相關推薦

es6基礎 Proxy(代理)

一、理解    源物件    代理(攔截)    操作    //打個比方    批發衣服:相當於供應商    代理商(張先生)    使用者(買)二、使用(攔截) get():攔截物件屬性的讀取 set():攔截物件屬性的設定 deleteProperty():攔截刪除物件

salesforce零基礎學習streaming api 簡單使用接近實時獲取你需要跟蹤的數據的更新消息狀態

source fault default 時間戳 存儲 推送 not lac alt Streaming API參考鏈接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_str

java基礎學習總結:logback詳解

為什麼使用logback logback大約有以下的一些優點: 核心重寫、測試充分、初始化記憶體載入更小,這一切讓logback效能和log4j相比有諸多倍的提升 logback非常自然地直接實現了slf4j,這個嚴格來說算不上優點,只是這樣,再理解slf4j的前提下會很容易理解

Python3基礎 正則表示式

一、正則表示式 正則表示式(Regular Expression)又稱 RegEx, 是用來匹配字元的一種工具. 在一大串字元中尋找你需要的內容. 它常被用在很多方面, 比如網頁爬蟲, 文稿整理,資料篩選等等. 最簡單的一個例子, 比如我需要爬取網頁中每一頁的標題. 而網頁中的標題常

Python3基礎 import 模組

各種import 的方法介紹 import time 指import time 模組,這個模組可以python自帶,也可以是自己安裝的,比如以後會用到numpy這些模組,需要自己安裝。 方法一:直接import 模組 >>> import time >

Java基礎系列:集合之Map

簡介 Map是一個介面,代表的是將鍵對映到值的物件。一個對映不能包含重複的鍵,每個鍵最多隻能對映到一個值。 Map 介面提供了三種collection檢視,允許以鍵集、值集或鍵-值對映關係集的形式檢視某個對映的內容。對映順序 定義為迭代器在對映的 collection 檢視上返回

Java基礎系列:泛型進階

型別變數的限定 有時,類或方法需要對型別變數加以約束,就像下面這樣: class ArrayAlg { public static <T extends Comparable> Pair<T> minmax(T[] a) { if (a

微信小遊戲-CocosCreator 基礎

1提前繫結資源,會提前載入(打包成圖集拖進去) cc.Director與 資源載入策略: cc.Director物件: 1:遊戲裡面控制管理整個遊戲全域性物件,包括了場景切換等,為cc.Director物件; 2:導演物件全域性只有一個cc.director,大寫的為類,

PPT基礎調整圖片透明度

以矩形圖片為例: 方法: 在PPT中插入矩形,將該矩形調整至圖片大小 點選該矩形,滑鼠右鍵->置於底層(K) 拖動圖片,點選該圖片,滑鼠右鍵->剪下(T) 點選剛剛插入的矩形 滑鼠右鍵->設定形狀格式(O)… 在右側的設定形狀格式對話方塊中,點選圖片或紋理填充§ 下

機器學習基礎—— 協同過濾從匹配使用者到匹配商品

考慮如下的使用者對影片的打分,由巢狀字典定義: critics = {'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5, 'J

salesforce零基礎學習lightning out

隨著salesforce對lightning的推進,越來越多的專案基於lightning開發,導致很多小夥伴可能都並不瞭解classic或者認為不需要用到classic直接就開始了lightning的開發。其實有精力瞭解classic的使用還是很有必要的,因為lightning還在不斷的優化中,可能有一部分還

一個屌絲程序猿的人生

努力 成了 策略 你們 日子 人生 我沒 時間 提升   項目演示當天!   教室裏一大早就熱鬧非凡。   張建派的人此刻已經聚集在一起,開始探討起接下來的戰術。   “弟兄們,今天就要開戰了啊。”   “是啊!想想還真有些小激動呢!”   “對了,張建人呢?”   “出去

Android Api Demos登頂之路Loader--&gt;Cursor

adapt lists 清空 function icon 創建 nal pat lines 這個demo演示了類載入器的用法。關於類載入器的使用我們在前面的demo中已經介紹過了 在此再小小的復習一下。類載入器的使用步驟: * 1.獲取類載入

【轉】JMeter學習HTTP屬性管理器HTTP Cookie Manager、HTTP Request Defaults

agen 讀取 expired fault 範圍 運行時 ear 定制 只有一個 Test Plan的配置元件中有一些和HTTP屬性相關的元件:HTTP Cache Manager、HTTP Authorization Manager、HTTP Cookie Manager

Python學習筆記網絡編程1TCP編程

包含 ipv sina spa 包括 現在 com 訪問 等等 摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004374523e49

2016集訓測試賽小結

時間 第一題 是我 很多 分析 題目 ... 人的 簡單   這場測試賽有必要小結一下.   昨晚 1 點才睡, 今天狀態很差, 先睡了 1 個小時, 然後開始打比賽. 第一題不大會做, 寫了一個代碼後發現是錯的, 第二題看不懂題, 第三題簡單地分析了一下, 發現是一個樹形

C#編程----------接口

目的 count() 聲明變量 form [] 類的繼承 計算機 構造 執行 接口 如果一個類派生自一個接口,聲明這個類就會實現某些函數.並不是所有的面向對象的語言都支持接口. 例如,有一個接口:IDispoable,包含一個方法Dispose(),該方法又類實現,用於清理

企業分布式微服務雲SpringCloud SpringBoot mybatis 集成swagger2構建Restful API

sel ima eth syn conf ring 但是 batis 關註 一、引入依賴 <dependency> <groupId>io.springfox</groupId> <

Spring Boot教程使用MongoDB數據庫1

frame 既然 artifact html ace 數據庫 支持 高度 官網 MongoDB簡介 MongoDB是一個基於分布式文件存儲的數據庫,它是一個介於關系數據庫和非關系數據庫之間的產品,其主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的RDBMS系統

Linux學習筆記shell特殊符號、 sort_wc_uniq、tee_tr_split

tee_tr_split命令一、特殊字符 1.‘* ‘任意個任意字符‘? ‘任意一個字符‘# ‘註釋字符‘ \ ‘脫義字符‘ | ‘管道符其中大部分之前都用過,對於脫義符‘\‘脫義符用法舉例如圖 2.幾個與管道有關的命令cut 分割,-d 分隔符 -f 指定段號 -c 指定第幾個字符 sort 排序,