昨日、プロトタイプの継承とコンストラクタについて投稿しました。私は最終的に、コードをきれいに整頓し、プロトタイプをそのままにしておくアプローチに落ち着きましたが、パフォーマンスへの影響はわずかでした。
function Card(value) {
// setValue is a public instance method
this.setValue = function (val) {
if (!range[val]) {
val = drawRandom();
}
// value is a public instance variable
this.value = val;
return val;
};
this.setValue(value);
}
ただし、このアプローチの問題は、検証を取得するために Card インスタンスの値を設定するたびに setValue メソッドを呼び出さなければならないことです。代わりにやりたいことは、カスタム セッター メソッドを用意することです。これが私がこれまでに持っているものです:
function Card(val) {
// value is a private instance variable
var value;
// This is a private instance method
// It's also self-invoking, but that's beside the point
(function (x) {
if (!range[x]) {
x = drawRandom();
}
value = x;
}(val));
this.__defineGetter__("value", function () {
return value;
});
// Some code duplication
this.__defineSetter__("value", function (x) {
if (!range[x]) {
return false;
}
value = x;
return x;
});
}
これはうまくいきます。呼び出すvar card = new Card()
とランダムな値を持つインスタンスが返さcard.value = null
れますが、範囲外であるため呼び出しは失敗します。
これに関する私の問題は、明らかにはるかに長いという事実以外に、コードの一部を複製しているように見えることです。セッターメソッドがコンストラクターと一緒に呼び出されるといいでしょう。そうすれば、自己呼び出しプライベート インスタンス メソッド全体を排除できます。