0

Node.js デザイン パターンの例

  function createProxy(subject) {
     var proto = Object.getPrototypeOf(subject);
     function Proxy(subject) {
       this.subject = subject;
     }
     Proxy.prototype = Object.create(proto);
     //proxied method
     Proxy.prototype.hello = function() {
       return this.subject.hello() + ' world!';
     }
     //delegated method
     Proxy.prototype.goodbye = function() {
       return this.subject.goodbye
         .apply(this.subject, arguments);
}
     return new Proxy(subject);
   }

プロトタイプチェーンが設定されているため、元の Object からのメソッドが自動的に呼び出される場合、 つまりProxy.prototype.goodbyeメソッドを再度再定義する必要があります。前もって感謝します。

4

2 に答える 2

1

新しくインスタンス化さProxyれた は から継承しませんsubject- に直接あるプロパティsubjectは、プロキシのサブジェクトプロパティでのみ使用できます。Proxy オブジェクト自体ですぐに使用できるのは、 のプロトタイプメソッドのみです。subjectしたがって、それがインスタンス化されたオブジェクトの直接のプロパティである場合、次の行が存在しない場合goodbye、直接アクセスすることはできません。Proxy.prototype.goodbye = ...

function createProxy(subject) {
  var proto = Object.getPrototypeOf(subject);
  function Proxy(subject) {
    this.subject = subject;
  }
  Proxy.prototype = Object.create(proto);
  //proxied method
  Proxy.prototype.hello = function() {
    return this.subject.hello() + ' world!';
  }
  return new Proxy(subject);
}
const prox = createProxy({
  goodbye() {
    console.log('goodbye.')
  }
});
prox.goodbye();

これらのメソッドは、インスタンス化されたプロキシの を介して利用できますが、元のコードのように明示的に割り当てない限り.subject、プロキシ自体を介しては利用できません。 Proxy.prototype.goodbye

于 2018-06-19T11:34:38.690 に答える