ES6個人筆記記錄 Proxy2

2021-10-05 21:20:14 字數 1625 閱讀 9542

1.get

let person =

;let proxy1 =

newproxy

(person,

else}}

)console.

log(proxy1.name, proxy1.age)

;

get方法可以被繼承

let proto =

newproxy(,

});const

= object;

const

= reflect;

let obj1 =

create

(proto)

;obj1.***;

使用get攔截實現陣列讀取負數索引

function

createarray

(...elements)

return

get(target, propkey, receiver);}

};let target =

; target.

push

(...elements)

;return

newproxy

(target, handler);}

;let arr1 =

createarray

('a'

,'b'

,'c');

let arr2 =

['a'

,'b'

,'c'];

console.

log(arr1[-1

], arr2[-1

]);

利用proxy,可以將讀取屬性的操作(get)轉變為執行某個函式,從而實現屬性的鏈式操作

let pipe =

(function()

,catch

, value);}

}}})

;return oproxy;}}

());

letdouble

= n => n *2;

letpow

= n => n * n;

letreverseint

= n => n.

tostring()

.split(""

).reverse()

.join(""

)|0;

// pipe(3).double.pow.reverseint.get;

set()方法用來攔截某個屬性的賦值操作

const

= number;

let validator =

if(value >

200)

// 對於age以外的屬性,直接儲存

obj[prop]

= value;}}

};let person1 =

newproxy

(, validator)

;console.

log(person1.age =

100)

;// console.log(person1.age = 'young')

ES6個人筆記記錄 Proxy5

雖然proxy可以 針對目標物件的訪問,但他不是目標物件的透明 即不做任何攔截的情況下也無法保證與目標物件的行為一致。主要原因就是在proxy 的情況下,目標物件內部的this關鍵字會指向proxy const target const handler const proxy newproxy ta...

ES6個人筆記記錄 Symbol

es5 的物件屬性名都是字串,這容易造成屬性名的衝突 比如,我們使用了乙個他人提供的物件,但又想為這個物件新增新的方法cmixin 模式 新方法的名字就有可能與現有方法產生衝突。es6引入了一種新的原始資料型別symbol,表示獨一無二的值 是第七種資料型別 1.number 2.string 3....

ES6個人筆記記錄 陣列擴充套件

擴充套件運算子 console.log 1,2,3,4 5 es5 console.log math.max.null,14,2,48 es6 let math console.log max 14,2,48 es5 var arr1 0 1,2 var arr2 3 4,5 console.log...