私は以下のシナリオに少しこだわっています。私は現在JavaScript: The Definitive Guideを読んでおり、Accessor プロパティの下に以下のコードが付属しています。
function inherit(p) {
if (p == null) throw TypeError();
if (Object.create) {
return Object.create(p);
}
var t = typeof p;
if (t !== 'Object' && t !== 'function') throw TypeError();
function f() {};
f.prototype = p;
return new f();
};
上記は、新しく作成されたオブジェクトのプロトタイプを設定する単純なコードです。next
以下は、が呼び出されたときに 55 より大きい値、つまり 56 を返す単純なコードです。
var serialNum = {
$n: 0,
get next() {
return this['$n']++;
},
set next(n) {
if (n >= this.$n) {
this.$n = n;
} else {
throw 'serial number can only be set to a larger value';
}
}
};
var genSerialNum = inherit(serialNum);
genSerialNum.$n = 55;
console.log(genSerialNum.next);
したがって$n
、genSerialNum
オブジェクトを設定すると、$n
プロパティが作成さgenSerialNum
れ、getter プロパティが呼び出されると、next
55 から 56 に増加します (これは、Chrome 開発ツールのスコープ変数から確認できるため)。ただし、コンソールで印刷すると、55 が表示されます。 。 どうして?