国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

JS基礎(chǔ)——Proxy

luodongseu / 1449人閱讀

摘要:用于修改某些操作的默認(rèn)行為基本操作有屬性查找,賦值,枚舉,函數(shù)調(diào)用等。報(bào)錯(cuò)攔截某個(gè)屬性的賦值操作目標(biāo)對(duì)象屬性名屬性值代理本身攔截的操作,返回一個(gè)布爾值。

Proxy 用于修改某些操作的默認(rèn)行為(基本操作有屬性查找,賦值,枚舉,函數(shù)調(diào)用等)。

/*
* target 目標(biāo)對(duì)象(可以是任何類(lèi)型的對(duì)象,包括原生數(shù)組,函數(shù),甚至另一個(gè)代理)
* handler 一個(gè)對(duì)象,其屬性是操作對(duì)應(yīng)的自定義代理函數(shù)
*/
let p = new Proxy(target, handler);
基本操作

1、get(target, propKey, receiver):攔截對(duì)象屬性的讀取

/*
* target 目標(biāo)對(duì)象
* propKey 對(duì)象屬性名
* proxy 實(shí)例本身(嚴(yán)格地說(shuō),是操作行為所針對(duì)的對(duì)象)
*/
get(target, propKey, receiver)
var obj = {name : "Lucy"}
var p = new Proxy(obj,{
    get : function(target,key,receive){
        return key === "name" ? "Hello "+target[key] : target[key]
    }
})
p.name  //Hello Lucy

需要注意的是,如果一個(gè)屬性不可配置(configurable)且不可寫(xiě)(writable),則 Proxy 不能修改該屬性。

var obj = Object.defineProperties({}, {
  name: {
    value: "Lucy",
    writable: false,
    configurable: false
  },
});
var p = new Proxy(obj, {
    get : function(target,key){
        return key === "name" ? "Hello "+target[key] : target[key]
    }
});
p.name //報(bào)錯(cuò)

2、set: function(obj, prop, value,receive) : 攔截某個(gè)屬性的賦值操作

/*
* target 目標(biāo)對(duì)象
* key 屬性名
* value 屬性值
* receive 代理本身
*/
set: function(target, key, value,receive)
var obj = {age : 18}
var p = new Proxy(obj,{
    set : function(target,key,value){
      if(key === "age"){
        target[key] = Math.min(value,100);    
      }else{
        target[key] = value;    
      }
    }
})
p.age = 101;
p.age // 100
obj.age // 100

3、has(target, key):攔截key in proxy的操作,返回一個(gè)布爾值。

4、deleteProperty(target, propKey):攔截delete proxy[propKey]的操作,返回一個(gè)布爾值。

5、ownKeys(target):ownKeys方法用來(lái)攔截對(duì)象自身屬性的讀取操作,返回一個(gè)數(shù)組。具體來(lái)說(shuō),攔截以下操作:

Object.getOwnPropertyNames() //返回所有屬性

Object.getOwnPropertySymbols()

Object.keys(proxy) //返回可枚舉屬性

for...in循環(huán)

var obj = Object.create(null)
Object.defineProperties(obj, {
  "_id": {
    value: 1,
    configurable : true,
    writable : true,
    enumerable : true
  },
  "name": {
    value : "Lucy",
    configurable : true,
    writable : true,
    enumerable : true
  }
});
Object.getOwnPropertyNames(obj) // ["_id","name"]
for(let key in obj){
    console.log(key) //依次輸出_id,name
}

var p = new Proxy(obj,{ 
    ownKeys : function(target){
        return Object.getOwnPropertyNames(target).filter(x => x[0] != "_")
    }
})
Object.getOwnPropertyNames(p) // ["name"]
for(let key in p){
    console.log(key) //輸出name
}

6、getOwnPropertyDescriptor(target, propKey):攔截Object.getOwnPropertyDescriptor(proxy, propKey),返回屬性的描述對(duì)象。

7、defineProperty(target, propKey, propDesc):返回一個(gè)布爾值,攔截以下操作

Object.defineProperty(proxy, propKey, propDesc)

Object.defineProperties(proxy, propDescs)

8、preventExtensions(target):攔截Object.preventExtensions(proxy),返回一個(gè)布爾值。

9、getPrototypeOf(target):攔截Object.getPrototypeOf(proxy),返回一個(gè)對(duì)象。

10、isExtensible(target):攔截Object.isExtensible(proxy),返回一個(gè)布爾值。

11、setPrototypeOf(target, proto):攔截Object.setPrototypeOf(proxy, proto),返回一個(gè)布爾值。如果目標(biāo)對(duì)象是函數(shù),那么還有兩種額外操作可以攔截。

12、apply(target, object, args):攔截 Proxy 實(shí)例作為函數(shù)調(diào)用的操作,比如

proxy(...args)

proxy.call(object, ...args)

proxy.apply(...)

13、construct(target, args):攔截 Proxy 實(shí)例作為構(gòu)造函數(shù)調(diào)用的操作,比如new proxy(...args)。

參考資料:

Proxy MDN
ECMAScript 6入門(mén)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/105353.html

相關(guān)文章

  • 【重溫基礎(chǔ)】14.元編程

    摘要:本文是重溫基礎(chǔ)系列文章的第十四篇。元,是指程序本身。有理解不到位,還請(qǐng)指點(diǎn),具體詳細(xì)的介紹,可以查看維基百科元編程。攔截,返回一個(gè)布爾值。 本文是 重溫基礎(chǔ) 系列文章的第十四篇。 這是第一個(gè)基礎(chǔ)系列的最后一篇,后面會(huì)開(kāi)始復(fù)習(xí)一些中級(jí)的知識(shí)了,歡迎持續(xù)關(guān)注呀! 接下來(lái)會(huì)統(tǒng)一整理到我的【Cute-JavaScript】的JavaScript基礎(chǔ)系列中。 今日感受:獨(dú)樂(lè)樂(lè)不如眾樂(lè)樂(lè)...

    cc17 評(píng)論0 收藏0
  • 寫(xiě)給前端小白看的linux部署基礎(chǔ)知識(shí)

    摘要:前端平時(shí)接觸到的機(jī)會(huì)并不多,但是懂點(diǎn)對(duì)于前端來(lái)說(shuō)還是有益無(wú)害的,起碼還是要了解一下最基本的部署知識(shí)。特別注意的是,國(guó)內(nèi)注冊(cè)的域名要實(shí)名備案,否則無(wú)法域名解析。 前端平時(shí)接觸到linux的機(jī)會(huì)并不多,但是懂點(diǎn)linux對(duì)于前端來(lái)說(shuō)還是有益無(wú)害的,起碼還是要了解一下最基本的部署知識(shí)。 博客地址 購(gòu)買(mǎi)服務(wù)器 要部署項(xiàng)目,首先我們需要一臺(tái)服務(wù)器。平時(shí)開(kāi)發(fā),項(xiàng)目是跑在我們本地電腦上的,現(xiàn)在我們想...

    王巖威 評(píng)論0 收藏0
  • Docker 私有注冊(cè)中心身份認(rèn)證

    摘要:考慮到這一點(diǎn),我們花費(fèi)了一些時(shí)間審查了我們維護(hù)的多種系統(tǒng),并在這星期,我給我們的私人注冊(cè)中心設(shè)置了添加身份認(rèn)證的目標(biāo)。你也許知道,注冊(cè)沒(méi)有提供身份認(rèn)證的方法。授權(quán)響應(yīng)觸發(fā)客戶(hù)端回應(yīng)一組使用基本身份驗(yàn)證的憑據(jù)。 注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication 安全已經(jīng)融入了我們的生活。我們鎖門(mén)...

    klinson 評(píng)論0 收藏0
  • Docker 私有注冊(cè)中心身份認(rèn)證

    摘要:考慮到這一點(diǎn),我們花費(fèi)了一些時(shí)間審查了我們維護(hù)的多種系統(tǒng),并在這星期,我給我們的私人注冊(cè)中心設(shè)置了添加身份認(rèn)證的目標(biāo)。你也許知道,注冊(cè)沒(méi)有提供身份認(rèn)證的方法。授權(quán)響應(yīng)觸發(fā)客戶(hù)端回應(yīng)一組使用基本身份驗(yàn)證的憑據(jù)。 注:原文作者是 Alex Ianchici,原文地址是 Docker private registry authentication 安全已經(jīng)融入了我們的生活。我們鎖門(mén)...

    Cc_2011 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<