JavaScript オブジェクトのアクセッサー
- 前のページ JS オブジェクト表示
- 次のページ JS オブジェクトコンストラクタ
JavaScriptアクセッサ(GetterとSetter)
ECMAScript 5 (2009) では GetterとSetterが導入されました。
GetterとSetterを使用して、オブジェクトのアクセッサ(計算された属性)を定義できます。
JavaScript Getter(getキーワード)
この例では lang
属性で取得 language
属性の値。
インスタンス
// オブジェクトを作成: var person = { firstName: "Bill", lastName : "Gates", language : "en", get lang() { return this.language; } }; // getter を使用してオブジェクトからのデータを表示: document.getElementById("demo").innerHTML = person.lang;
JavaScript Setter(setキーワード)
この例では lang
属性で設定 language
属性の値。
インスタンス
var person = { firstName: "Bill", lastName : "Gates", language : "", set lang(lang) { this.language = lang; } }; // setter を使用してオブジェクト属性を設定: person.lang = "en"; // オブジェクトからのデータを表示: document.getElementById("demo").innerHTML = person.language;
JavaScript関数でしょうか、 Getterでしょうか?
以下の二つの例の違いは何ですか?
例1
var person = { firstName: "Bill", lastName : "Gates", fullName : function() { return this.firstName + " " + this.lastName; } }; // オブジェクトからのデータを表示するためにメソッドを使用します: document.getElementById("demo").innerHTML = person.fullName();
例2
var person = { firstName: "Bill", lastName : "Gates", get fullName() { return this.firstName + " " + this.lastName; } }; // getter を使用してオブジェクトからのデータを表示: document.getElementById("demo").innerHTML = person.fullName;
例1では、関数形式でfullNameにアクセス:person.fullName()。
例2では、属性形式でfullNameにアクセス:person.fullName。
二つ目の例はより簡潔な文法を提供しています。
データ品質
getterとsetterを使用すると、JavaScriptはより良いデータ品質を確保できます。
この例では、以下を使用します lang
属性は大文字で返されます language
属性の値:
インスタンス
// オブジェクトを作成: var person = { firstName: "Bill", lastName : "Gates", language : "en", get lang() { return this.language.toUpperCase(); } }; // getter を使用してオブジェクトからのデータを表示: document.getElementById("demo").innerHTML = person.lang;
この例では、以下を使用します lang
属性は大文字の値を保存します language
属性中:
インスタンス
var person = { firstName: "Bill", lastName : "Gates", language : "", set lang(lang) { this.language = lang.toUpperCase(); } }; // setter を使用してオブジェクト属性を設定: person.lang = "en"; // オブジェクトからのデータを表示: document.getElementById("demo").innerHTML = person.language;
なぜ Getter と Setter を使用するのか?
- より簡潔な構文を提供します
- 属性とメソッドの構文が同じになります
- より良いデータ品質を確保できます
- バックグラウンド作業に有利
カウンターオブジェクトのインスタンス
インスタンス
var obj = { counter : 0, get reset() { this.counter = 0; }, get increment() { this.counter++; }, get decrement() { this.counter--; }, set add(value) { this.counter += value; }, set subtract(value) { this.counter -= value; } }; // カウンタ操作: obj.reset; obj.add = 5; obj.subtract = 1; obj.increment; obj.decrement; Object.defineProperty()
Object.defineProperty()
メソッドも Getter と Setter を追加するために使用できます:
インスタンス
// 定义对象 var obj = {counter : 0}; // 定义 setters 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 (value) {this.counter -= value;} }); // カウンタ操作: obj.reset; obj.add = 5; obj.subtract = 1; obj.increment; obj.decrement;
ブラウザサポート
Internet Explorer 8 以降のバージョンでは Getter と Setter をサポートしていません:
はい | 9.0 | はい | はい | はい |
- 前のページ JS オブジェクト表示
- 次のページ JS オブジェクトコンストラクタ