<p id="getter"></p>
<input type="text" id="setter">
1. defineProperty方法
var p = document.getElementById('getter');
var input = document.getElementById('setter');
mvvm(p, input);
function mvvm(p, input) {
input.addEventListener('keyup', modelViewViewModel);
var demo = new Object(null);
Object.defineProperty(demo, 'val', {
set: function (value) {
p.innerText = value; // value,变更后的结果
},
get: function () {
return val;
}
})
function modelViewViewModel() {
demo['val'] = input.value
}
}
2. proxy方式
let data = {
p: document.getElementById('getter'),
input: document.getElementById('setter')
}
mvvm(data);
function mvvm(data) {
data.input.addEventListener('keyup', modelViewViewModel); // set
let demo = new Proxy(data, {
set(target, key, value) {
console.log(value);
data.p.innerText = value
},
get(target, key) {
console.log(target, key, target[key].innerText);
return target[key].innerText
}
})
console.log(demo.p); // get
function modelViewViewModel() {
demo.p = data.input.value
}
}