js proxy handler

233 阅读1分钟
const handler = {
    // 获取对象的原型
    getPrototypeOf(target) {
       /**
        * trigger:
        *
        * Object.getPrototypeOf()
        * Reflect.getPrototypeOf(target)
        * __proto__
        * Object.prototype.isPrototypeOf()
        * instanceof
        * */
    },
    // 设置对象的原型
    setPrototypeOf(target, prototype) {
       /**
        * trigger:
        *
        * Object.setPrototypeOf()
        * Reflect.setPrototypeOf(target, prototype)
        * */
    },
    // 判断对象是否可扩展
    isExtensible(target) {
        /**
         * trigger:
         *
         * Object.isExtensible()
         * Reflect.isExtensible(target)
         * */
    },
    // 阻止扩展
    preventExtensions(target) {
        /**
         * trigger:
         *
         * Object.preventExtensions()
         * Reflect.preventExtension(target)
         * */
    },
    // 获取自有属性描述符
    getOwnPropertyDescriptor(target, property) {
        /**
         * trigger:
         *
         * Object.getOwnPropertyDescriptor()
         * Reflect.getOwnPropertyDescriptor(target, property)
         * */
    },
    // 设置对象的访问器属性
    defineProperty(target, property, descriptor) {
        /**
         * trigger:
         *
         * Object.defineProperty()
         * Reflect.defineProperty(target, propertyKey, descriptor)
         * */
    },
    // 判断某个property是否存在于对象中
    has(target, property) {
        /**
         * trigger:
         *
         * foo in proxy
         * foo in Object.create(proxy)
         * with(proxy) {(foo)}
         * */
    },
    // 获取对象的属性值
    get(target, property, receiver) {
        /**
         * trigger:
         *
         * proxy[foo] proxy.bar
         * Object.create(proxy)[foo]
         * Reflect.get(target, property, receiver)
         * */
    },
    // 设置对象的属性值
    set(target, property, value, receiver) {
       /**
        * trigger:
        *
        * proxy[foo] = bar proxy.foo = bar
        * Object.create(proxy)[foo] = bar
        * Reflect.set(target, property, value, receiver)
        * */
    },
    // 删除对象的属性
    deleteProperty(target, property) {
       /**
        * trigger:
        *
        * delete proxy[foo] delete proxy.foo
        * Reflect.deleteProperty(target, property)
        * */
    },
    // 函数对象指定运行上下文
    apply(target, thisArg, argumentsList) {
       /**
        * trigger:
        *
        * proxy(...args)
        * Function.prototype.apply() Function.prototype.call()
        * Reflect.apply(target, thisArgument, argumentsList)
        * */
    },
    // 创建实例拦截
    construct(target, argumentsList, newTarget) {
        /**
         * trigger:
         *
         * new proxy(...args)
         * Reflect.construct(target, argumentsList, newTarget)
         * */
    },
};