setter 和 Object.create() 的使用;

Use of setter and Object.create();

我正在看系列丛书你不懂JS。在其中一本书中写道:

If a foo is found higher on the [[Prototype]] chain and it’s a setter (see Chapter 3), then the setter will always be called. No foo will be added to (aka shadowed on) myObject, nor will the foo setter be redefined.

现在我尝试了以下代码:

var a = {
  set t(tet) {
    this._t_ = tet;
  },
  get t() {
    return this._t_ ;
  }
};

a.t = 5;
var b = Object.create(a);
b.t = 4;
console.log(a.t);
console.log(b.t);

令我惊讶的是,日志按顺序打印出 54。根据书中的内容,我希望看到两个 4 被打印出来,但似乎实际上有阴影。这是为什么?


感谢 Quentin 的回答,这实际上是演示我想要的功能的代码:)

var a = { 
  t : undefined, 
  set t(tet) {
    t = tet;
  },
  get t() {
    return  t ;
  }
};

a.t = 5;
var b = Object.create(a);
b.t = 4;
console.log(a.t);
console.log(b.t);

45 存储在两个不同对象的 _t_ 中,而不是 t 中。

在这两种情况下,

t 仍然是 setter 和 getter(尽管 this 的值有所不同,因为它是在两个不同对象的上下文中调用的) .