Proxy data getter

@inner
@param {Object} ctx the component instance
@param {string} prop the property name
function proxyDataGetter(ctx, prop) {
    let proxyProps = ctx.__proxyProps;
    proxyProps || (proxyProps = ctx.__proxyProps = {});
    if (proxyProps[prop]) {
        return;
    }

    proxyProps[prop] = true;

    let descriptor = Object.getOwnPropertyDescriptor(ctx, prop);
    if (descriptor && descriptor.configurable) {
        let newDescriptor = Object.assign({}, descriptor, {
            get() {
                ctx.__deps && ctx.__deps.push(prop);
                return descriptor.get && descriptor.get.call(ctx);
            }
        });
        Object.defineProperty(ctx, prop, newDescriptor);
    }
    else {
        console.warn('cannot configure the data prop descriptor info:', prop);
    }
}