From 4f33b45ec2d006c544bd6b6f279d63ab6c9d5ffe Mon Sep 17 00:00:00 2001 From: wangteng Date: Tue, 10 Sep 2019 22:19:22 +0800 Subject: [PATCH] aug-week4 --- 2019/Aug/Week4/reactive-variables.js | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/2019/Aug/Week4/reactive-variables.js b/2019/Aug/Week4/reactive-variables.js index 15981f3..5317bb6 100644 --- a/2019/Aug/Week4/reactive-variables.js +++ b/2019/Aug/Week4/reactive-variables.js @@ -3,6 +3,38 @@ */ module.exports = class ReactiveVariables { constructor(variables) { + const result = {}; + const variablesObj = Object.assign({}, variables); + Object.keys(variables).forEach(key => { + if(typeof variables[key] === 'function') { + result[key] = variables[key].call(variablesObj); + variablesObj[key] = result[key]; + } else { + Object.defineProperty(result, key, { + get: () => variablesObj[key], + set: (val) => { + variablesObj[key] = val; + + Object.keys(result).forEach(k => { + if(typeof result[k] === 'object') { + if(Object.keys(result[k]).indexOf(key) > -1) { + result[k] = variables[k].call(variablesObj); + variablesObj[k] = result[k]; + } + } else if(typeof variables[k] === 'function') { + if(variables[k].call(variablesObj) !== result[k]) { + result[k] = variables[k].call(variablesObj); + variablesObj[k] = result[k]; + } + } + }) + }, + }) + result[key] = variables[key]; + } + }) + + return result; } }