ES5: Object.defineProperty
//html
:<span id="spanName"></span>
<br>
<input type="text" id="inpName">
//JS 2.0
let obj = {
name: ''
};
let newObj = JSON.parse(JSON.stringify(obj));
Object.defineProperty('obj', 'name', {
get() {
return newObj.name;
},
set(val) {
if(val === newObj.name) return;
newObj.name = val;
objServer();
}
});
//==== 2.0
//3.0
let obj = {};
obj = new Proxy(obj, {
get(target, prop) {
return target[prop];
},
set(target, prop, value) {
target[prop] = value;
objServer();
}
})
//==== 3.0
function objServer() {
spanName.innerHtml = newObj.name;
inpName.value = newObj.name;
}
setTimeout(() => {
obj.name = 'ホットだ;
}, 1000);
inpName.oninput = function() {
obj.name = this.value;
}
//2.0
1.生データのクローン化
2.オブジェクトの各プロパティのリスナーを個別に設定する必要がある。