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