JS代码的Object.defineProperty()方法不太懂

今天看到一篇文章,其中有关于Object.defineProperty()方法的代码,如下:

var people = {
  name: 'Bob',
};
var count = 18;

// 定义一个 age 获取值时返回定义好的变量 count
Object.defineProperty(people, 'age', {
  get: function () {
    console.log('获取值!');
    return count;
  },
  set: function (val) {
    console.log('设置值!');
    count = val + 1;
  },
});

console.log(people.age);
people.age = 20;
console.log(people.age);

输出:

获取值!
18
设置值!
获取值!
21

我从输出中的“设置值”开始就不明白是怎么输出的了。希望各位能解释一下。

people.age = 20;
就是给people设置值,会调用set函数,
就会调用 console.log('设置值!');
打印出设置值,
val参数的值就是20,
count就等于21 啊,
获取值会调用get函数,4
返回count的值,就是输出21,这有啥不明白的呢