美文网首页
JavaScript代理模式与new Proxy对象模拟实现pr

JavaScript代理模式与new Proxy对象模拟实现pr

作者: 罗坤_23333 | 来源:发表于2019-04-02 21:50 被阅读0次

设计原则

代理与本体接口一致性

  • 用户可以放心地使用代理,只需要关心能否得到想要的结果
  • 在任何使用本体的地方都可以替换成使用代理
  • 单一职责 与 开放-封闭原则

单一职责原则指的是,就一个类(通常也包括对象和函数等)而言,应该仅有一个引起它变化的原因。如果一个对象承担了多项职责,就意味着这个对象将变得巨大,引起它变化的原因可能会有多个。面向对象设计鼓励将行为分布到细粒度的对象之中,如果一个对象承担的职责过多,等于把这些职责耦合到了一起,这种耦合会导致脆弱和低内聚的设计。[1]

new Proxy模拟实现Prop-types

API设计

PropTypes.checkPropTypes(obj:Object[, proptypes])

Usage

let obj = {}
//add type props
obj.propTypes = {
  name : PropTypes.string,
  age : PropTypes.number
}

//subscribe
obj = PropTypes.checkPropTypes(obj)
//or 
obj = PropTypes.checkPropTypes(obj, {
  name: PropTypes.string,
  age : PropTypes.number
})

obj.name = 24; //throw Error
console.log(obj.name)  //undefined

实现

PropTypes对象[2]

    export const PropTypes = {
        checkPropTypes: function(){
            let obj = arguments[0],
                _propTypes = arguments[1];
            return new Proxy(obj, {
                set(target,key,val,proxy){
                    let _target = _propTypes||target.propTypes;
                    if(new RegExp(_target[key]['reg']).test(val)){
                        return Reflect.set(target,key,val,proxy)
                    }
                    return _target[key]['error'].call(this)
                }
            })
        },
        string:{
            reg:/^[\u4e00-\u9fa5]*$/,
            error:function(){
                throw new Error('不是字符串类型')
            }
        },
        number:{
            reg:/^[0-9]*$/,
            error:function(){
                throw new Error('不是数字类型')
            }
        },
    }

Reference

相关文章

  • JavaScript代理模式与new Proxy对象模拟实现pr

    设计原则 代理与本体接口一致性 用户可以放心地使用代理,只需要关心能否得到想要的结果 在任何使用本体的地方都可以替...

  • 2、代理模式

    一、代理模式基本概念 1、模式说明 proxy代理对象:(1)实现与具体的目标对象一样的接口,这样就可以使用代理来...

  • 面试常问的设计模式之代理模式的详细解析

    Proxy-代理模式 代理模式 代理模式: Proxy Pattern. 指为对象提供一种代理,用以控制对这个对象...

  • ES6中新增的Proxy怎么用?

    Proxy 代理。 1 什么是代理? 可通过new Proxy(obj,{})创建一个obj对象的代理对象,代码如...

  • 代理模式介绍以及jdk动态代理实现

    下一篇进阶 代理模式_利用CGLIB实现对Class动态代理 定义 代理模式(Proxy)为其他对象提供一种代理以...

  • 2020-02-26

    Spring的AOP代理模式 三种实现 1. 通过Proxy的newProxyInstance(类加载器,代理对象...

  • 大连滕泰科技学习笔记2020-05-07

    1,静态代理模式 2,动态代理(实现方式JDK自带的Proxy代理类) 2,1 代理对象2,2 要代理的目标对象2...

  • 代理模式

    代理模式(Proxy),为一个对象提供一种代理以实现对这个对象的访问。 代理模式涉及到3个部分: 公用接口:定义了...

  • 代理模式(Proxy)

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 主方法 接口类 实现类(被代理类) 代理类

  • 代理模式

    一、什么是代理模式 代理模式(Proxy pattern):代理模式又叫委托模式,是为某个对象提供一个代理对象,并...

网友评论

      本文标题:JavaScript代理模式与new Proxy对象模拟实现pr

      本文链接:https://www.haomeiwen.com/subject/ujnnbqtx.html