委托模式
将内部属性委托给外部处理
安装
npm i delegates
使用
const delegate = require('delegates');const proto = {dog: {name: '旺财',age: 1,sex: '男',bar() {console.log('bar!');}},}// 将内部对象 dog 的属性、函数// 委托至暴露在外的 Shop 上delegate(proto, 'dog')// proto.dog.name属性委托到 proto上 可以直接proto.name只读。.getter('name')// proto.dog.age属性委托到 proto上 可以直接proto.age只写。.setter('age')// proto.dog.sex属性委托到 proto上 可以直接proto.sex写读可写.access('sex')// proto.dog.bar方法委托到 proto上 可以直接proto.bar调用.method('bar');
源码
源码很简单:
- method是通过call实现的
- getter是通过defineGetter实现的
- setter是通过defineSetter实现的
- access是通过getter+setter上实现的
- fluent是在外部对应属性挂一个方法,方法调用时如果有入参就设置对应属性的值,如果没入参就返回当前属性的值
