跟着大佬撸原理
https://www.jianshu.com/p/123146abdd1a
自己总结:
<div>
<input type="text" id="input-msg">
<p id="output-msg"></p>
</div>
<script>
var inputMsg = document.getElementById('input-msg');
var outputMsg = document.getElementById('output-msg');
var obj = {
msg: 'hello'
};
var key = 'msg';
var val = obj[key];
Object.defineProperty(obj, 'value', {
enumerable: true,
configurable: true,
set: function (newValue) {
val = newValue;
outputMsg.innerHTML = val;
console.log('setter',val);
console.log('setter',obj);
},
get: function () {
console.log('getter',val);
return val;
}
})
inputMsg.addEventListener('input',function(e){
obj['value'] = e.target.value;
console.log(e.target.value)
})
console.log(obj)
</script>
上面的Object.defineProperty监听obj的value,当在控制台打印obj.value的时候会走到get方法里面,当给obj.value = 2的时候,会走到set方法里面;