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