1.get
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.***;
利用proxy,可以將讀取屬性的操作(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
]);
set()方法用來攔截某個屬性的賦值操作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;
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...