详细可以看上面的转载文章,本文简单笔记
一:Object.defineProperty()
ES 5 JavaScript 所提供 Object.defineProperty() 函数。它允许我们为属性定义 getter 和 setter 函数。

控制台打印:

代码运行并尝试 get price属性的值时,我们希望price能够记住这个匿名函数(target)。通过这种方式,如果price发生了变化,或者被set了一个新的值,这个函数就能重新运行,因为它能够知道这行代码依赖该属性。所以,你可以按照如下的方式来思考。
Get=>记住该匿名函数,当值发生变化的时候我们会重新运行。
Set=>运行保存的匿名函数,我们的值就会发生变化。
或者,在 Dep Class 的场景下:
Price 访问 (get) =>调用dep.depend()保存当前的target;
Price set =>调用 price 的dep.notify(),重新运行所有的target。接下来,我们将这两个理念组合起来,并看一下最终的代码。
