====== JavaScript Objectオブジェクト ======
--- //[[http://www.y2sunlight.com/water|y2sunlight]] 2021-03-30//
===== 概要 =====
全てのオブジェクトの共通的な性質/機能を提供する。
Objectメンバ(主要なもの) ※その他プロパティ/プロトタイプ/変更可否に関するものもある。
|メンバ|概要|
|constructor|インスタンス化で使用されたコンストラクタ|
|toString()|インスタンスの文字列表現の取得|
|toLocaleString()|インスタンスの文字列表現の取得(地域依存)|
|valueOf()|インスタンスの基本型表現の取得(基本型を取得)|
|create() ※|与えられたオブジェクトから新しいインスタンスを作る|
|assign() [[js:top#ECMAScript|*2015]] ※|与えられたオブジェクトのコピー|
|is() [[js:top#ECMAScript|*2015]] ※|与えられたオブジェクトの比較|
※ 静的メソッド
\\ \\
===== create()メソッド =====
Object.create(proto, props); // 新しいオブジェクトを作る
=== いろいろなオブジェクトの作り方 ===
// 方法1
var obj = {name:'taro', age:17};
// 方法2
var obj = new Object();
obj.name = 'taro';
obj.age = 17;
// 方法3
var obj = Object.create(Object.prototype, {
name: {value:'taro', writable:true, configurable:true, enumerable:true},
age: {value:17, writable:true, configurable:true, enumerable:true}
});
※詳しくは[[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/create|MDN]]参照
\\
===== assign()メソッド =====
Object.assign(target, source1, …); // オブジェクトのマージ
Student1 = {name:'taro', age:17};
Student2 = {name:'hanako', tel:'090-1234-56789'};
Object.assign(Student1,Student2);
console.log(Student1); // 結果 {name:'hanako', age:17, tel:'090-1234-56789'}
console.log(Student2); // 結果 {name:'hanako', tel:'090-1234-56789'}
// マージせずに新しいオブジェクトを作る時
Object.assign({}, Student1); // taroのみコピー
Object.assign({}, Student1, Student1, Student2); // taroをコピーしてhanakoをマージ
\\
===== 不変オブジェクト =====
* インスタンス生成後、一切の状態を変更できないオブジェクト
* JavaScriptではObjectオブジェクトの静的メソッドを使用して不変オブジェクトを定義できる
《変更可否を操作する静的メソッド》
| |設定|確認|
|プロパティの追加禁止|preventExtensions(obj);|isExtensible(obj)|
|プロパティの追加/削除禁止|seal(obj)|isSealed(obj)|
|プロパティの追加/削除/変更禁止 \\ (不変オブジェクト)|freeze(obj)|isFrozen(obj)|
※Strictモードを有効にしないと変更しようとしても例外発生しない。有効にする事を推奨