<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
// let obj = {
// a:10
// }
// let a = {
// sub(a, b){
// console.log(this.a);
// return a+this.a
// }
// }
// console.log(a.sub.apply(obj,[20]));
// let obj = {
// a:10
// }
// function sub(a, b){
// return a+this.a
// }
// let handler = {
// apply(target, ctx, args){
// console.log(target);
// console.log(ctx);
// console.log(args);
// return Reflect.apply(...arguments);
// }
// }
// let proxy = new Proxy(sub, handler)
// console.log(proxy(2, 1));
// console.log(proxy.apply(obj,[2,1]));
// has(target, propKey)
// "检测的名称" in new Proxy()
// 用于拦截 HasProperty 操作,即在判断 target 对象是否存在 propKey 属性时,会被这个方法拦截。
// 此方法不判断一个属性是对象自身的属性,还是继承的属性。
// 存在返回true,否则false
// let handler = {
// has(target, propKey){
// console.log(target);
// console.log(propKey);
// return propKey in target;
// }
// }
// let exam = {name: "Tom"}
// let proxy = new Proxy(exam, handler)
// console.log('names' in proxy);
// construct(target, args)用于拦截 new 命令。返回值必须为对象。
// let handler = {
// construct (target, args, newTarget) {
// console.log(target);
// console.log(args);
// console.log(newTarget);
// return Reflect.construct(target, args)
// }
// }
// class Exam {
// constructor (name) {
// console.log(name);
// this.name = name
// }
// }
// let ExamProxy = new Proxy(Exam, handler)
// let proxyObj = new ExamProxy('Tom')
// console.log(proxyObj)
// function exam(name){
// console.log(name);
// this.name = name;
// }
// console.log(Reflect.construct(exam, [[99]]));
// let handler = {
// deleteProperty(target, propKey){
// // console.log(target);
// // console.log(propKey);
// // delete target[propKey];
// return true;
// }
// }
// let target = {
// a:1,
// b:2
// }
// Object.defineProperty(target,"c",{
// value:3
// })
// let proxy = new Proxy(target, handler);
// // proxy.name = "zs"
// delete proxy.a;
// delete proxy.b;
// delete target.a;
// console.log(target);
let handler = {
defineProperty: function(target, propKey, propDesc){
console.log(target);
console.log(propKey);
console.log(propDesc);
target[propKey] = propDesc.value;
return false;
}
}
let target = {}
let proxy = new Proxy(target, handler)
proxy.name = "Tom"
// handle defineProperty
console.log(target);
</script>
</html>
大学生课堂笔记
于 2024-03-08 14:29:01 首次发布