Source: internal/state.js

/**
 * Created by zhangmike on 16/10/18.
 */

export default function initState(GMP) {
    /**
     * Setup the scope of an instance, which contains:
     * - observed data
     */
    GMP.prototype._initState = function () {
        this._initData();
    };

    GMP.prototype._initData = function () {
        this._data = this.$options.data;
        var keys = Object.keys(this._data);
        var that = this;
        for (var i = 0, l = keys.length; i < l; i++) {
            var key = keys[i],
                val = this._data[keys[i]];
            var property = Object.getOwnPropertyDescriptor(this._data, key);
            if (property && property.configurable === false) {
                continue;
            }

            (function(k, v) {
                Object.defineProperty(that._data, k, {
                    enumerable: true,
                    configurable: true,
                    get: function reactiveGetter () {
                        return v;
                    },
                    set: function reactiveSetter (newVal) {
                        var value = v;
                        if (newVal === value) {
                            return;
                        }
                        v = newVal;
                    }
                })
            })(key, val);
        }
    };
};