JavaScript ES5 オブジェクト メソッド
ECMAScript 5 (2009) では、JavaScript に多くの新しいオブジェクト メソッドが追加されました。
オブジェクトの管理
// 既存のオブジェクトをプロトタイプとして使用してオブジェクトを作成する
Object.create()
// オブジェクトのプロパティの追加または変更
Object.defineProperty(object, property, descriptor)
// オブジェクトのプロパティの追加または変更
Object.defineProperties(object, descriptors)
// プロパティへのアクセス
Object.getOwnPropertyDescriptor(object, property)
// すべてのプロパティを配列として返します
Object.getOwnPropertyNames(object)
// プロトタイプへのアクセス
Object.getPrototypeOf(object)
// 列挙可能なプロパティを配列として返します
Object.keys(object)
オブジェクトの保護
// オブジェクトにプロパティを追加できないようにします
Object.preventExtensions(object)
// プロパティをオブジェクトに追加できる場合は true を返します
Object.isExtensible(object)
// オブジェクトのプロパティ (値ではない) の変更を防止します
Object.seal(object)
// オブジェクトがシールされている場合は true を返します
Object.isSealed(object)
// オブジェクトへの変更を禁止します
Object.freeze(object)
// オブジェクトが凍結されている場合は true を返します
Object.isFrozen(object)
プロパティ値の変更
構文
Object.defineProperty(object, property, {value : <em>value</em>})
この例では、プロパティ値を変更します。
例
const person = {
firstName: "John",
lastName : "Doe",
language : "EN"
};
// プロパティを変更する
Object.defineProperty(person, "language", {value : "NO"});
メタデータの変更
ES5 では、次のプロパティ メタデータを変更できます。writable : true // プロパティ値は変更可能です
enumerable : true // プロパティを列挙できる
configurable : true // プロパティは再構成可能です
ES5 では、次のプロパティ メタデータも変更できます。
writable : false // プロパティ値は変更できません
enumerable : false // プロパティを列挙できません
configurable : false // プロパティは再構成できません
ES5 では、ゲッターとセッターを変更できます。
// ゲッターの定義
get: function() { return language }
// セッターの定義
set: function(value) { language = value }
この例では、言語を読み取り専用にします。
Object.defineProperty(person, "language", {writable:false});
次の例では、言語を列挙できなくします。
Object.defineProperty(person, "language", {enumerable:false});
すべてのプロパティの一覧表示
この例では、オブジェクトのすべてのプロパティを一覧表示します。
例
const person = {
firstName: "John",
lastName : "Doe",
language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.getOwnPropertyNames(person); // プロパティの配列を返します
列挙可能なプロパティの一覧表示
この例では、オブジェクトの列挙可能なプロパティのみを一覧表示します。
例
const person = {
firstName: "John",
lastName : "Doe",
language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.keys(person); // 列挙可能なプロパティの配列を返します。
プロパティの追加
この例では、オブジェクトに新しいプロパティを追加します。
例
// オブジェクトを作成します。
const person = {
firstName: "John",
lastName : "Doe",
language : "EN"
};
// プロパティを追加する
Object.defineProperty(person, "year", {value:"2008"});
ゲッターとセッターの追加
Object.defineProperty()
メソッドを使用して、Getter と Setter を追加することもできます。
例
//オブジェクトを作成する
const person = {firstName:"John", lastName:"Doe"};
// ゲッターを定義する
Object.defineProperty(person, "fullName", {
get: function () {return this.firstName + " " + this.lastName;}
});
反例
例
// オブジェクトの定義
const obj = {counter:0};
// セッターを定義する
Object.defineProperty(obj, "reset", {
get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
set : function (i) {this.counter -= i;}
});
// カウンターを使って遊んでみましょう
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。