【每日一包0026】delegates

王煒發表於2019-02-16

[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

相關文章