北京专业网站制作技术,有什么网站可以做跳转连接的,石家庄招投标公共服务平台官网,软件开发课程Reflect Reflect拥有Object对象的一些内部方法#xff0c;某些方法会同时在Object对象和Reflect对象上部署#xff0c;也就是说Object对象上存在的方法#xff0c;通过Reflect也可以访问到。 单论Reflect的话#xff0c;可以这么理解#xff0c;Reflect就是继承了Object的…Reflect Reflect拥有Object对象的一些内部方法某些方法会同时在Object对象和Reflect对象上部署也就是说Object对象上存在的方法通过Reflect也可以访问到。 单论Reflect的话可以这么理解Reflect就是继承了Object的某些内置方法并且提供了优化 Object对象上的某些方法会有些缺陷例如在Object.defineProperty·上对一个不可写或不可枚举的属性进行getter或setter时会抛出错误。 对于这个错误我们需要try catch去捕获而Reflect.defineProperty则会抛出false来表示本次操作失败Reflect对对象的操作都会抛出true和false来表示是否操作成功。
Object
const obj { name : 东方不败 }
Object.defineProperty(obj,age,{value : 100,writable : true, // 只读configurable : false // 不可删除和修改
})Object.defineProperty(obj,age,{get(){ return 200 }
})
console.log(obj.age); // TypeError : Cannot redefine property: age
// 报错不能重新定义属性Reflect
const obj2 { name : 西方求败 }
Object.defineProperty(obj2,age,{value : 100,writable : true, // 只读configurable : false // 不可删除和修改
})let status Reflect.defineProperty(obj2,age,{get(){ return }
})console.log(status); // false
console.log(obj2.age); // 100
// Reflect会抛出false表示此次操作失败总结 将Object对象的一些明显属于语言内部的方法比如Object.defineProperty放到Reflect对象上。现阶段某些方法同时在Object和Reflect对象上部署未来的新方法将只部署在Reflect对象上。也就是说从Reflect对象上可以拿到语言内部的方法。 修改某些Object方法的返回结果让其变得更合理。比如Object.defineProperty(obj, name, desc)在无法定义属性时会抛出一个错误而Reflect.defineProperty(obj, name, desc)则会返回false。 让Object操作都变成函数行为。某些Object操作是命令式比如name in obj和delete obj[name]而Reflect.has(obj, name)和Reflect.deleteProperty(obj, name)让它们变成了函数行为。 Reflect对象的方法与Proxy对象的方法一一对应只要是Proxy对象的方法就能在Reflect对象上找到对应的方法。这就让Proxy对象可以方便地调用对应的Reflect方法完成默认行为作为修改行为的基础。也就是说不管Proxy怎么修改默认行为你总可以在Reflect上获取默认行为。