原生代码实现vue响应式原理

<div id="app">
    <input type="text" id="aT">
    <h1 id="a"></h1>
    <br><br><br>
    <input type="text" id="bT">
    <h1 id="b"></h1>
</div>


<script>
    // 第一种定义对象
    var obj = {};
    var a = 'aaa';
    // 给obj定义属性b,并赋值为变量a的值
    obj.b = a;

    // 初始化
    document.getElementById("a").innerText = obj.b;
    document.getElementById('aT').value = obj.b;

    // 页面绑定
    document.getElementById("aT").oninput = function (e) {
        //将数据绑定给obj
        obj.b = e.target.value;
        // 将obj的值渲染在DOM上
        document.getElementById('a').innerText = obj.b;
    }






    // 第二种定义对象
    var vm = {}
    var msg = 'aaa'
    // 给vm定义属性foo,数据劫持
    Object.defineProperty(vm, 'foo', {
        // 赋值为变量msg的值
        get() {
            console.log('foo获取了msg的值');
            return msg;
        },
        // 变更属性foo的值为传入的newVal值
        set(newVal) {
            foo = newVal;
            console.log('foo变更了值');
            watcher('foo', foo)
        }
    })

    // 初始化
    document.getElementById("b").innerText = vm.foo;
    document.getElementById('bT').value = vm.foo;

    // 页面绑定
    document.getElementById("bT").addEventListener('input', function (e) {
        vm.foo = e.target.value
    })

    //监听器:更新DOM
    function watcher(key, value) {
        switch (key) {
            case 'foo':
                document.getElementById('b').innerText = value;
                break;
            default:
        }
    }


</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值