Object.prototype.hasOwnProperty():
应用
通过原型链继承该方法
判断属性是否是对象自身的
示例
Object.defineProperty() :
descriptor 属性描述符对象:
数据属性
1.configurable:表示能否通过delete删除属性从而重新定义属性, 能否修改属性的特性,或者能否把属性修改为访问器属性,默认值为false。
2.enumerable:表示能否通过for in循环访问属性,默认值为false
3.writable:表示能否修改属性的值。默认值为false。
4.value:包含这个属性的数据值。默认值为undefined。
访问器属性
作用:
将对象属性绑定到另一个对象上
Proxy:
代理是什么?
简单理解就是我们不直接对对象、函数或者数组进行操作,而是把它挂载到Proxy(代理)上, 直接对代理的做一系列操作。我们去买房,房产中介就相当于我们的代理,我们不需要直接向卖家沟通。
JS代理Proxy
代理是目标对象的抽象。目标对象既可以直接被操作,也可以通过代理来操作。 但直接操作会绕过代理施予的行为。 首先就是空代理,就是什么也不做,在代理对象上执行的所有操作都会无障碍地传播到目标对象。 代理是使用 Proxy 构造函数创建的。这个构造函数接收两个参数:目标对象和处理程序对象。缺少其中任何一个参数都会抛出 TypeError。
捕获器(trap)
使用代理的主要目的是可以定义捕获器(trap)。捕获器就是在处理程序对象中定义的“基本操作的“拦截器”。 每个处理程序对象可以包含零个或多个捕获器,每个捕获器都对应一种基本操作,可以直接 或间接在代理对象上调用。每次在代理对象上调用这些基本操作时,代理可以在这些操作传播到目标对 象之前先调用捕获器函数,从而拦截并修改相应的行为
捕获器一共13种 apply 、construct、defineProperty、deleteProperty、 get、getOwnPropertyDescriptor、getPrototypeOf、has、isExtensible ownKeys、preventExtensions、set、setPrototypeOf ,但是比较常见的为以下两种:
get()
set()