JavaScriptデコレータを使用して適用するにはどうすればよいですか?

Mopparthy Ravindranath

非常に単純なコードでデコレータを使用する方法を理解しようとしているので、この概念をより大きなプロジェクトに適用できます。ここにあるAddyOsmaniの記事からヒントを得て、次のような簡単なコードを作成しました。

たとえば、メソッドを使用してというクラスがありCatmeow()以下のようにロギングで装飾したいとします。

class Cat {
  @logger
  meow() { console.log( ' Meeeoow! ') }
};


function logger(target, key, descriptor) {
  console.log("Cat snarling...");
  return descriptor;
}

const cat = new Cat();
cat.meow();

Node.jsインタープリター(バージョン9.1.0)に対してこれを実行しようとすると、次のエラーが発生します。

/Users/ravindranath/projects/decorators/index.js:2 @logger ^ 
    SyntaxError:
    モジュールのObject.runInThisContext(vm.js:152:10)の
    createScript(vm.js:80:10)

無効または予期しないトークン。 _compile(module.js:605:28)
    at Object.Module._extensions..js(module.js:652:10)
    at Module.load(module.js:560:32)
    at tryModuleLoad(module.js:503: 12)
    Function.Module._load(module.js:495:3)
    、Function.Module.runMain(module.js:682:10)
    、起動時(bootstrap_node.js:191:16)
    、bootstrap_node.js:613: 3

だから、私の質問は次のとおりです。

  1. Node.js 9.xはデコレータ構文をサポートしていますか?それとも、将来のバージョンで登場するのでしょうか?

  2. express-jsGitHubにベースのデコレータがいくつかありますが、独自のデコレータを作成する方法がわかりません。誰かがNode.jsでカスタムデコレータを作成する簡単な基本的な例を提供できますか?

アンドリュー・リー

デコレータはECMAScript2016(別名7)の一部ではありませんデコレータは現在、機能が完成して言語の一部になる前に通過する4つのステージのうちステージ2ドラフトにあります。それらはおそらく近い将来言語に統合されるでしょうが、その機能と詳細は変更される可能性があります。このため、transform-decoratorsBabelプラグインをインストールして、デコレータをノードランタイムが理解できるコード(ECMAScript 2016)に変換するには、Babelなどのトランスパイラーを使用する必要があります。

デコレータの作成に関しては、すでに作成しています。各デコレータは、別のデコレータをラップする関数であり、ユースケースtarget基づいた引数が提供されます。この場合、、、、keyおよびdescriptorあなたのlogger機能:

function logger(target, key, descriptor) {
  console.log("Cat snarling...");
  return descriptor;
}

すでにデコレータです。クラスのプロパティとメソッドの場合、targetプロパティのクラスを参照し、keyはプロパティ名であり、descriptorはプロパティの記述子です。次に、デコレータが呼び出され、クラスのプロパティがObject.defineProperty一度脱糖されて定義されます。あなたの例はこれに要約することができます:

class Cat { }

let meowDescriptor = {
  type: 'method',
  initializer: () => () => {
    console.log(' Meeeoow! ');
  },
  enumerable: false,
  configurable: true,
  writable: true
}

function logger(target, key, descriptor) {
  console.log("Cat snarling...");
  return descriptor;
}

meowDescriptor = logger(Cat.prototype, 'meow', meowDescriptor);
Object.defineProperty(Cat.prototype, 'meow', {
  ...meowDescriptor,
  value: meowDescriptor.initializer()
});

クラス自体の場合、デコレータtargetは、デコレートされたクラスを説明する1つの引数を取ります私はそれを知るために主題に関するいくつかの文書読むことを提案します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CoffeeScriptでデコレータパターンを適用してオブジェクトを拡張するにはどうすればよいですか?

分類Dev

Rを使用してデータフレームの特定の列に関数を適用するにはどうすればよいですか?

分類Dev

プレーンなJavascriptを使用してCSSスタイルをランダムに適用するにはどうすればよいですか?

分類Dev

条件に基づいて適用するデコレータを選択するにはどうすればよいですか?

分類Dev

データの複数の列に適用される条件を使用して新しい変数を作成するにはどうすればよいですか?

分類Dev

JavaScriptを使用して画像に透かしを適用するにはどうすればよいですか?

分類Dev

このデータフレームを変換してセルにフィルターを適用するにはどうすればよいですか?

分類Dev

各列に異なる関数を適用してデータフレームをリサンプルするにはどうすればよいですか?

分類Dev

AutoNumericをすべてのセレクターに適用するにはどうすればよいですか?

分類Dev

Javascriptを使用して、3つの変数をターゲットにして、Math.random()を適用するにはどうすればよいですか?

分類Dev

R:データフレーム内の選択した変数にコマンドを適用するにはどうすればよいですか?

分類Dev

jqueryセレクターの正規表現を使用して要素にいくつかの属性を適用するにはどうすればよいですか?

分類Dev

ラムダを各データフレーム行に適用して、2つの条件をテストするにはどうすればよいですか?

分類Dev

複数のgroup-by条件を適用して、pandasデータフレームの列で操作を実行するにはどうすればよいですか?

分類Dev

レールでデコレータを正しく使用するにはどうすればよいですか?

分類Dev

Babelを介してクラスインスタンスでJavaScriptデコレータを使用するにはどうすればよいですか?

分類Dev

パンダのデータフレームに対して関数を適用するにはどうすればよいですか?

分類Dev

csvデータを変数として使用して数式に適用するにはどうすればよいですか?

分類Dev

HTML / CSSカスタムデータ属性を使用して「a」にCSSを適用するにはどうすればよいですか?

分類Dev

カスタムコンパレータをRデータフレームに適用するにはどうすればよいですか?

分類Dev

ディレクティブReactiveフォームを使用して検証ルールを適用するにはどうすればよいですか?

分類Dev

JavaScript を使用して SVG ポリラインにグラデーションを適用するにはどうすればよいですか?

分類Dev

jQueryなしで「:contains」セレクターを適用するにはどうすればよいですか?

分類Dev

PowerShell:where-objectコマンドレットを介して複数のフィルターを適用するにはどうすればよいですか?

分類Dev

Javaアノテーションを使用してコーディング標準を適用するにはどうすればよいですか?

分類Dev

null以外のレコードにのみ注文を適用し、すべてのレコードを取得するにはどうすればよいですか?

分類Dev

C ++テンプレートを使用して正式なプロトコルを適用するにはどうすればよいですか?

分類Dev

EPPlusを使用して、テキストの長さのExcelデータ検証を列に適用するにはどうすればよいですか?

分類Dev

ベクトルをデータフレームの参照として使用して、ベクトル内のすべてのデータフレームに関数を適用するにはどうすればよいですか?

Related 関連記事

  1. 1

    CoffeeScriptでデコレータパターンを適用してオブジェクトを拡張するにはどうすればよいですか?

  2. 2

    Rを使用してデータフレームの特定の列に関数を適用するにはどうすればよいですか?

  3. 3

    プレーンなJavascriptを使用してCSSスタイルをランダムに適用するにはどうすればよいですか?

  4. 4

    条件に基づいて適用するデコレータを選択するにはどうすればよいですか?

  5. 5

    データの複数の列に適用される条件を使用して新しい変数を作成するにはどうすればよいですか?

  6. 6

    JavaScriptを使用して画像に透かしを適用するにはどうすればよいですか?

  7. 7

    このデータフレームを変換してセルにフィルターを適用するにはどうすればよいですか?

  8. 8

    各列に異なる関数を適用してデータフレームをリサンプルするにはどうすればよいですか?

  9. 9

    AutoNumericをすべてのセレクターに適用するにはどうすればよいですか?

  10. 10

    Javascriptを使用して、3つの変数をターゲットにして、Math.random()を適用するにはどうすればよいですか?

  11. 11

    R:データフレーム内の選択した変数にコマンドを適用するにはどうすればよいですか?

  12. 12

    jqueryセレクターの正規表現を使用して要素にいくつかの属性を適用するにはどうすればよいですか?

  13. 13

    ラムダを各データフレーム行に適用して、2つの条件をテストするにはどうすればよいですか?

  14. 14

    複数のgroup-by条件を適用して、pandasデータフレームの列で操作を実行するにはどうすればよいですか?

  15. 15

    レールでデコレータを正しく使用するにはどうすればよいですか?

  16. 16

    Babelを介してクラスインスタンスでJavaScriptデコレータを使用するにはどうすればよいですか?

  17. 17

    パンダのデータフレームに対して関数を適用するにはどうすればよいですか?

  18. 18

    csvデータを変数として使用して数式に適用するにはどうすればよいですか?

  19. 19

    HTML / CSSカスタムデータ属性を使用して「a」にCSSを適用するにはどうすればよいですか?

  20. 20

    カスタムコンパレータをRデータフレームに適用するにはどうすればよいですか?

  21. 21

    ディレクティブReactiveフォームを使用して検証ルールを適用するにはどうすればよいですか?

  22. 22

    JavaScript を使用して SVG ポリラインにグラデーションを適用するにはどうすればよいですか?

  23. 23

    jQueryなしで「:contains」セレクターを適用するにはどうすればよいですか?

  24. 24

    PowerShell:where-objectコマンドレットを介して複数のフィルターを適用するにはどうすればよいですか?

  25. 25

    Javaアノテーションを使用してコーディング標準を適用するにはどうすればよいですか?

  26. 26

    null以外のレコードにのみ注文を適用し、すべてのレコードを取得するにはどうすればよいですか?

  27. 27

    C ++テンプレートを使用して正式なプロトコルを適用するにはどうすればよいですか?

  28. 28

    EPPlusを使用して、テキストの長さのExcelデータ検証を列に適用するにはどうすればよいですか?

  29. 29

    ベクトルをデータフレームの参照として使用して、ベクトル内のすべてのデータフレームに関数を適用するにはどうすればよいですか?

ホットタグ

アーカイブ