ES6個人筆記記錄 Proxy5

2021-10-05 21:20:14 字數 1327 閱讀 3050

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

const target =};

const handler =

;const proxy =

newproxy

(target,handler)

;target.m(

);proxy.m(

);

由於this指向的變化導致proxy無法**目標物件

console.

log(

'----------------------eg2------------------------');

const _name =

newweakmap()

;class

person

getname()

}const jane =

newperson

('jane');

console.

log(jane.name)

;const proxy1 =

newproxy

(,jane)

;console.

log(proxy.name)

;

目標物件jane的name屬性實際儲存在外部weakmap物件_name上面,通過this鍵區分。

由於通過proxy.name訪問時,this指向proxy,導致無法取值,所以返回undefined

某些原生物件的內部屬性只有通過正確this才能獲取,所以proxy也無法**原生物件屬性

error

const target = new date();

const handler = {};

const proxy = new proxy(target,handler);

proxy.getdate();

const target2 =

newdate()

;const handler1 =

return reflect.

get(target,prop);}

};const proxy2 =

newproxy

(target2,handler1)

;console.

log(proxy2.

getdate()

);

適合做web服務的客戶端,也可以來實現資料庫的orm層

ES6個人筆記記錄 Proxy2

1.getlet person let proxy1 newproxy person,else console.log proxy1.name,proxy1.age get方法可以被繼承 let proto newproxy const object const reflect let obj1 c...

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...