我有点坚持以下情况。我目前正在阅读JavaScript:权威指南,并在 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);
因此,当我设置Object 时,它会创建一个$n
属性并调用 getter 属性,它会从 55 增加到 56(因为这是我从 chrome 开发工具的范围变量中看到的),但在控制台中打印时会显示 55 。 为什么?genSerialNum
$n
genSerialNum
next