ps:只总结我不清楚的点了
类
类(class)是 ECMAScript6 新增的。实际上也是一种语法题,其本质是构造函数。
类的继承,在构造器中使用 super() ,之后可以在别的地方通过 super 打点调用继承类的静态方法
类可以继承如 Array 之类的大对象,实现在 Array 上新增属性和方法操作
extends 只能继承一个类,所以为了实现多个类,一种方法是定义一组“可嵌套”的函数,如B继承A,C继承B,最后继承C
第九章 代理与反射
proxy 代理
代理是目标对象的抽象
使用:let proxy = new Proxy(target, handler)
Proxy 监听 target 目标对象,通过 handler 拦截对象对 target 的操作进行拦截处理;简单来说就是操作 target 时,会先通过 handler 去对这次操作进行处理,最后才执行到 target 处。
Proxy 拦截的方法有:
-
get(target, propKey, receiver)
拦截目标对象的属性的读取(目标对象,读取的属性key,proxy实例本身) -
set(target, propKey, value, receiver)
拦截目标对象设置属性值的操作(目标对象,设置的属性Key,属性值,proxy实例本身) -
has(target, key)
拦截 propKey in proxy 的操作,返回 boolean 值 -
deleteProperty(target, propKey)
拦截 delete proxy[propKey] 的操作,返回 boolean 值 -
ownKeys(target)
拦截 Object.key(proxy)、for...in...等循环,返回一个数组,且内容只能是 propKey,其他内容不会显示 -
getOwnPropertyDescriptor(target, propKey)
拦截 Object.getOwnPropertyDescriptor,返回对象的属性描述 -
defineProperty(target, propKey, propDesc)
拦截 Object.defineProperty,返回一个布尔值 -
preventExtensions(target)
拦截 Object.preventExtensions(proxy)[此方法将对象配置为不可扩展],返回一个布尔值 -
getPrototypeOf(target)
拦截 Object.getPrototypeOf(proxy)[此方法获取对象的原型对象],返回一个对象 -
isExtensible(target)
拦截 Object.isExtensible(proxy)[此方法判断对象是否可扩展],返回一个布尔值 -
setPrototypeOf(target, proto)
拦截 Object.setPrototypeOf(proxy, proto)[设置对象的原型对象],返回一个布尔值 -
apply(target, object, args)
拦截 Proxy 实例作为函数调用的操作 -
construct(target, args)
拦截 Proxy 实例作为构造函数的调用
从我的理解来说,Proxy 应该是一种升级版的 defineProperty,它能够监听更多的对象方法调用,并且是监听整个对象,而不像 defineProperty 只是监听对象里的属性。
网友评论