Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

prototype-pattern

同じ型のオブジェクトを大量に生成する際、メソッドやプロパティをプロトタイプチェーン経由で効率的に共有するためのプロトタイプパターンを解説します。同種オブジェクトをメモリ効率よく扱いたいときに活用してください。

description の原文を見る

Teaches the prototype pattern for property sharing via the prototype chain. Use when creating many objects of the same type that should share methods or properties efficiently.

SKILL.md 本文

プロトタイプパターン

プロトタイプパターンは、同じ型の多くのオブジェクト間でプロパティを共有するための便利な方法です。プロトタイプはJavaScriptネイティブのオブジェクトで、プロトタイプチェーンを通じてオブジェクトからアクセスできます。

アプリケーションでは、同じ型のオブジェクトを多数作成する必要があることがよくあります。これを行うための便利な方法は、ES6クラスの複数のインスタンスを作成することです。

使用時機

  • 多くのオブジェクトが重複なく同じメソッドにアクセスする必要がある場合に使用してください
  • JavaScriptの継承モデルとES6クラスを理解するのに役立ちます

指示

  • ES6クラスを使用してメソッドを自動的にプロトタイプに追加します
  • Object.create() を使用して特定のプロトタイプを持つオブジェクトを作成します
  • 継承にプロトタイプチェーンを活用します(ES6クラスの extends キーワード)
  • プロトタイプのプロパティは共有されており、インスタンスごとに複製されないことを理解します

詳細

たくさんの犬を作成したいとしましょう!この例では、犬はそこまで多くのことはできません。単に名前を持っていて、吠えることができるだけです!

class Dog {
  constructor(name) {
    this.name = name;
  }

  bark() {
    return `Woof!`;
  }
}

const dog1 = new Dog("Daisy");
const dog2 = new Dog("Max");
const dog3 = new Dog("Spot");

ここで注意すべき点は、constructorname プロパティを含み、クラス自体が bark プロパティを含んでいることです。ES6クラスを使用する場合、クラス自体に定義されたすべてのプロパティ(この場合は bark)は自動的に prototype に追加されます。

prototype プロパティをコンストラクタを通じてアクセスするか、任意の_インスタンス_上の __proto__ プロパティを通じてアクセスすることで、prototype を直接見ることができます。

console.log(Dog.prototype);
// constructor: ƒ Dog(name, breed) bark: ƒ bark()

console.log(dog1.__proto__);
// constructor: ƒ Dog(name, breed) bark: ƒ bark()

コンストラクタの任意のインスタンス上の __proto__ の値は、コンストラクタのプロトタイプへの直接参照です!オブジェクト上に直接存在しないプロパティにアクセスしようとするたびに、JavaScriptは_プロトタイプチェーンを下って_プロトタイプチェーン内でプロパティが利用可能かどうかを確認します。

プロトタイプパターンは、同じプロパティへのアクセスを持つべきオブジェクトを扱うときに非常に強力です。プロパティの複製を毎回作成する代わりに、すべてのインスタンスがプロトタイプオブジェクトにアクセスできるため、単にプロトタイプにプロパティを追加できます。

すべてのインスタンスはプロトタイプにアクセスできるため、インスタンス作成後でもプロトタイプにプロパティを簡単に追加できます。

犬は吠えるだけではなく、遊ぶこともできるべきだとしましょう!プロトタイプに play プロパティを追加することでこれを実現できます。

プロトタイプチェーンという用語は、複数のステップが存在する可能性があることを示しています。実際のところ、ここまで見てきたのは、__proto__ が参照を持つ最初のオブジェクトで直接利用可能なプロパティにアクセスする方法だけです。しかし、プロトタイプ自体にも __proto__ オブジェクトがあります!

別の種類の犬、スーパードッグを作成しましょう!この犬は通常の Dog からすべてを継承すべきですが、飛ぶこともできるべきです。Dog クラスを拡張し、fly メソッドを追加することでスーパードッグを作成できます。

class SuperDog extends Dog {
  constructor(name) {
    super(name);
  }

  fly() {
    return "Flying!";
  }
}

Dog クラスを拡張したため、bark メソッドにアクセスできます。SuperDog のプロトタイプ上の __proto__ の値は、Dog.prototype オブジェクトを指しています!

プロトタイプ_チェーン_と呼ばれる理由が明確になります。オブジェクト上に直接利用可能でないプロパティにアクセスしようとするたびに、JavaScriptはプロパティを見つけるまで、__proto__ が指すすべてのオブジェクトを再帰的に下って歩きます!

Object.create

Object.create メソッドを使用すると、新しいオブジェクトを作成でき、そのプロトタイプの値を明示的に渡すことができます。

const dog = {
  bark() {
    return `Woof!`;
  },
};

const pet1 = Object.create(dog);

pet1 自体には何のプロパティもありませんが、プロトタイプチェーン上のプロパティにはアクセスできます!dog オブジェクトを pet1 のプロトタイプとして渡したため、bark プロパティにアクセスできます。

Object.create は、新しく作成されたオブジェクトのプロトタイプを指定することで、オブジェクトが他のオブジェクトからプロパティを直接継承できるようにする簡単な方法です。新しいオブジェクトはプロトタイプチェーンを下って歩くことで新しいプロパティにアクセスできます。

プロトタイプパターンにより、オブジェクトが他のオブジェクトのプロパティに簡単にアクセスして継承できます。プロトタイプチェーンにより、オブジェクト自体に直接定義されていないプロパティにアクセスできるため、メソッドとプロパティの複製を避けることができ、使用されるメモリの量を減らすことができます。

ソース

参考資料

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
patternsdev
リポジトリ
patternsdev/skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/patternsdev/skills / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: patternsdev · patternsdev/skills · ライセンス: MIT