function MVVM(options) { this.$options = options; var data = this._data = this.$options.data; var me = this; // 数据代理 // 实现 vm.xxx -> vm._data.xxx Object.keys(data).forEach(function(key) { me._proxy(key); }); observe(data, this); this.$compile = new Compile(options.el || document.body, this) } MVVM.prototype = { $watch: function(key, cb, options) { new Watcher(this, key, cb); }, _proxy: function(key) { var me = this; Object.defineProperty(me, key, { configurable: true, enumerable: true, get: function proxyGetter() { return me._data[key]; }, set: function proxySetter(newVal) { me._data[key] = newVal; } }); } };