2021-07-21
1611
#vanilla javascript
Lawrence Eagles
58810
Jul 21, 2021 ⋅ 5 min read

Understanding JavaScript decorators

Lawrence Eagles Senior full-stack developer, writer, and instructor.

Recent posts:

From custom integrations to A2UI: A better way to ship agent UIs

AI agents don’t have to live in chat bubbles. This guide shows how A2UI lets agents generate real, interactive UIs, and walks through building a working React demo using Gemini and a2ui-bridge.

Emmanuel John
Feb 9, 2026 ⋅ 8 min read

LLM routing in production: Choosing the right model for every request

Learn how LLM routing works in production, when it’s worth the complexity, and how teams choose the right model for each request.

Alexander Godwin
Feb 5, 2026 ⋅ 11 min read
React Svelte Next JS

Remix vs. Next.js vs. SvelteKit

Compare key features of popular meta-frameworks Remix, Next.js, and SvelteKit, from project setup to styling.

Alex Merced
Feb 4, 2026 ⋅ 8 min read
replay feb 4

The Replay (2/4/26): AI-first leadership, Tailwind layoffs, and more

Discover what’s new in The Replay, LogRocket’s newsletter for dev and engineering leaders, in the February 4th issue.

Matt MacCormack
Feb 4, 2026 ⋅ 37 sec read
View all posts

5 Replies to "Understanding JavaScript decorators"

  1. Error in code there
    “Let’s learn about this by rewriting our log decorator:

    function log(target, name, descriptor) {
    if (typeof original === ‘function’) { <—– what is "original" ?

  2. The @log class method example is completely wrong and needs to be updated. The log function receives 3 arguments: the target object, the name of the target class member and a descriptor, an object containing the implementation of the class member.

    1. Hello A, it is important to note that the decorator API has evolved. You seem to refer to the stage 2 API. Below is the updated shape of the current sage 3 API in TypeScript:

      type Decorator = (value: Input, context: {
      kind: string;
      name: string | symbol;
      access: {
      get?(): unknown;
      set?(value: unknown): void;
      };
      private?: boolean;
      static?: boolean;
      addInitializer?(initializer: () => void): void;
      }) => Output | void;

      Checkout https://github.com/tc39/proposal-decorators for more.

Leave a Reply

Hey there, want to help make our blog better?

Join LogRocket’s Content Advisory Board. You’ll help inform the type of content we create and get access to exclusive meetups, social accreditation, and swag.

Sign up now