私は最近、JavaScript でゲッター/セッターを定義できる可能性があるという事実について読みました。非常に役立つようです。セッターは、実際に設定する前に、最初に設定する値を解析できる一種の「ヘルパー」です。
たとえば、現在次のコードがあります。
var obj = function(value) {
var test = !!value; // 'test' has to be a boolean
return {
get test() { return test },
set test(value) { test = !!value }
};
};
var instance = new obj(true);
value
このコードは常にブール値に変換されます。したがって、コーディングするinstance.test = 0
と、instance.test === false
.
ただし、これが機能するには、実際にobjectを返す必要があります。つまり、新しいインスタンスは型ではなくobj
、単なるオブジェクトです。これは、 のプロトタイプを変更しobj
てもインスタンスには影響しないことを意味します。たとえば、これは機能しません-instance.func
未定義です:
obj.prototype.func = function() { console.log(this.value); };
instance
型ではありませんのでご了承obj
ください。プロトタイプ関数を機能させるには、通常のコンストラクターが機能するように、単純なオブジェクトを返すのではなく、何も返さないようにする必要があると思いinstance
ます。obj
問題は、ゲッター/セッターを実装する方法ですか? カスタム型のコンストラクターの一部としてではなく、これらをオブジェクトに追加する方法を説明している記事しか見つかりません。
では、ゲッター/セッターの使用とプロトタイプの拡張の両方を可能にするために、コンストラクターにゲッター/セッターを実装するにはどうすればよいでしょうか?