委托模式
将内部属性委托给外部处理
安装
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是在外部对应属性挂一个方法,方法调用时如果有入参就设置对应属性的值,如果没入参就返回当前属性的值