内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
ecmascript:object
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
<markdown> # Object ## Object.create 既存のオブジェクトをプロパティとして新しいオブジェクトを生成する手法。現在ではほぼ使用されていないメソッドだが、プロトタイプのないオブジェクトを作りたい場合に有効。 ```javascript // p2をプロトタイプにオブジェクトを作成 const p = { greet: function() { console.log(`Hello ${this.name}`) } }; const o1 = Object.create(p); obj.greet(); // Hello obj.name = 'Nyan'; obj.greet(); // Hello Nyan // プロトタイプのないオブジェクトを生成 const o2 = Object.create(null); o2.toString(); // エラー、toStringなど基本的なメソッドも持っていない! ``` ## Object.defineProperty / Object.defineProperties オブジェクトに新しいプロパティを直接定義したり、既存のプロパティを変更したりする。通常のプロパティ定義では設定できないを付与することも可能だが、現在(2025年)ではほぼ使用されていない。 ### データプロパティの定義 ```javascript let a = { 'fuga': 'ふが' }; // 戻り値があるが、a自身が変更される。a2 === aである const a2 = Object.defineProperty(a, "hoge", { value: "ほげ" // valueの変更不可(ただしwriatble: trueの場合は変更可能)、削除不可、definePropertyでのさらなる変更不可 configurable: false, // 列挙不可 enumerable: false, // valueの変更不可 writable: false, }); ``` `configurable`, `writable`, `enumerable`の各属性はデフォルトfalse。definePropertyを使わずににプロパティを作った場合はいずれもtrueとなる ### アクセサプロパティの定義 いわゆるgetter, setter。valueとwritableを同時に設定できない。 ```javascript class Hoge { #name; constructor(name) { this.#name = name; } } let a = new Hoge('nyan'); const a2 = Object.defineProperties(a, 'name', { get() { return this.#name }, set(name) { this.#name = name } }); ``` ### writable属性 falseの場合、値を代入しても変化しない ```javascript var a = {}; Object.defineProperty(a, "hoge", { value: "ほげ" }); // 上書きできない! a.hoge = "ふが"; console.log(a.hoge); // => ほげ ``` ### enumerable属性 falseの場合 - Object.assignでのコピー対象にならない - for inで列挙されない - スプレッド演算子に認識されない - Object.keysに現れない - JSON.stringifyで出力されない ### configurable属性 falseの場合、 - deleteできない - 属性を変更できない(ただし、writable: trueの場合、valueを変更したり、writable: falseに変えることは可能) </markdown>
ecmascript/object.txt
· 最終更新:
2025/09/15 14:50
by
nullpon
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ