使用proxy来调用未定义的属性方法

当我们调用一个函数的未定义属性时会报错。那么可以使用一个proxy拦截,并且传入dispatch函数,来使当调用未定义属性时,执行dispatch函数。

原理:

创建一个实例:function createInstance(target:object, dispatch:Functin)
将dispatch绑定到target的一个属性上,最好这个属性名使用Symbol防止重复

const NAME =Symbol('DISPATCH')
Object.assign(target, {
    
     [Name]: dispatch } )
return new Proxy(target, handler)

这里的handler是还没有写的,应该至少包括get和apply属性
在调用target的属性时,可以使用get来进行拦截key,判断是否未定义
如果未定义可以设置 handler的属性值 ifundefined = true,这个ifundefined值会在proxy的apply出产生作用。
当我们调用属性方法时,会被handler的apply拦截。apply拦截后判断ifundefined是否为true,如果为true表示:这个属性未定义,调用dispatch函数,即调用target[NAME]。并把args传给apply中。在apply中使用call调用方法

  public apply(target: object, ctx: any, args: any[]) {
    
    
    //调用对象的时候调用dispatch方法
    const dispatch = target[NAME]
    return dispatch.call(thisArg, this.keys, args)
  }

这样的话就起到了调用未定义属性时执行指定函数的函数的作用

猜你喜欢

转载自blog.csdn.net/qq_42535651/article/details/104492343