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);
令我惊讶的是,日志按顺序打印出 5
和 4
。根据书中的内容,我希望看到两个 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);
4
和 5
存储在两个不同对象的 _t_
中,而不是 t
中。
在这两种情况下,t
仍然是 setter 和 getter(尽管 this
的值有所不同,因为它是在两个不同对象的上下文中调用的) .
我正在看系列丛书你不懂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);
令我惊讶的是,日志按顺序打印出 5
和 4
。根据书中的内容,我希望看到两个 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);
4
和 5
存储在两个不同对象的 _t_
中,而不是 t
中。
t
仍然是 setter 和 getter(尽管 this
的值有所不同,因为它是在两个不同对象的上下文中调用的) .