Proxy()学习

90 阅读1分钟

Proxy()的定义

The Proxy object enables(v.使得;授予…权力) you to create a proxy for another object, which can intercept(v.拦截;拦阻;截住)and redefine(v.重新定义;改变…的本质(或界限);使重新考虑) fundamental(adj. 十分重大的;根本的;基础的;基本的) operations for that object.

//todo ****************************************************************************
网络翻译:Proxy对象使您能够为另一个对象创建代理,该代理可以拦截和重新定义该对象的基本操作。
//todo ****************************************************************************
我的翻译:Proxy() 对象使你创建一个代理对象为另一个对象,这个代理对象可以拦截、重(自)定义基础操作为那个对象。
理解:对象A 使用Proxy()方法创建一个代理对象B, 对象B可以拦截、自定义(对象A的)基础操作。

实例说明 (User就是{age:10}的代理对象,同时有set,get拦截)

image.png

文档 -- 我也不知道是个啥

interface ProxyHandler<T extends object> {
    apply?(target: T, thisArg: any, argArray: any[]): any;
    construct?(target: T, argArray: any[], newTarget: Function): object;
    defineProperty?(target: T, p: string | symbol, attributes: PropertyDescriptor): boolean;
    deleteProperty?(target: T, p: string | symbol): boolean;
    get?(target: T, p: string | symbol, receiver: any): any;
    getOwnPropertyDescriptor?(target: T, p: string | symbol): PropertyDescriptor | undefined;
    getPrototypeOf?(target: T): object | null;
    has?(target: T, p: string | symbol): boolean;
    isExtensible?(target: T): boolean;
    ownKeys?(target: T): ArrayLike<string | symbol>;
    preventExtensions?(target: T): boolean;
    set?(target: T, p: string | symbol, value: any, receiver: any): boolean;
    setPrototypeOf?(target: T, v: object | null): boolean;
}

interface ProxyConstructor {
    revocable<T extends object>(target: T, handler: ProxyHandler<T>): { proxy: T; revoke: () => void; };
    new <T extends object>(target: T, handler: ProxyHandler<T>): T;
}
declare var Proxy: ProxyConstructor;