使用setter和Object.create();

时间:2016-07-17 15:50:11

标签: javascript prototype setter

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

  

如果在[[Prototype]]链上发现foo更高,那么它就是一个setter   (见第3章),然后将始终调用setter。没有foo   添加到(也称为阴影)myObject,foo setter也不会   重新定义。

现在我尝试了以下代码:

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);

1 个答案:

答案 0 :(得分:1)

map(:)do { if let jsonArray = try NSJSONSerialization .JSONObjectWithData(data, options: []) as? [[String: AnyObject]] { for element in jsonArray { let customer = Mapper<Customer>().map(element) print(customer) // customer is of type Customer? } } else { /* ... */ } } catch let error as NSError { print(error) } 存储在4的两个不同对象上,而不是5

在这两种情况下,

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