[github地址:https://github.com/ABCDdouyae…]
delegates (koa2原始碼依賴)
委託機制,用於物件屬性代理
Delegate(proto, prop)建立一個代理例項,使用proto物件下的prop物件作為被代理者
method(name) 接受一個方法,進行方法代理
將request上的方法直接代理到ctx上
const delegate = require(`delegates`);
var ctx = {};
ctx.request = {
fn: function(i){return i}
};
delegate(ctx, `request`)
.method(`fn`);
console.log(ctx.fn(1))
getter(name) 屬性的獲取被代理
var ctx = {
request:{
url: `localhost:8080`
}
};
delegate(ctx, `request`)
.getter(`url`)
console.log(ctx.url);//localhost:8080
setter(name) 屬性的賦值代理
var ctx = {
request:{}
}
delegate(ctx, `request`)
.setter(`other`)
ctx.other = `1`;
console.log(ctx.request.other)//1
access(name) 賦值和獲取值得雙向代理
var ctx = {
request: {}
}
delegate(ctx, `request`)
.access(`method`)
ctx.method = `POST`;
console.log(ctx.request.method);//`POST`
ctx.request.method = `GET`;
console.log(ctx.method);//`GET`
fluent(name) 被代理者中該屬性有值就返回該值,沒有的話可以通過函式呼叫設定,返回ctx物件
var ctx = {
request:{
a : 1
}
}
delegate(ctx, `request`)
.fluent(`a`)
console.log(ctx.a())//1
console.log(ctx.a(2))//{ request: { a: 2 }, a: [Function] }
console.log(ctx.a())//2