js实现vue双向数据绑定 利用访问器属性

双向数据绑定面试一般都会问到,恶补一下,
首先要了解访问器属性用法,时间关系,先贴代码,有时间了分析一下
详解CDN上有

Object.defineProperty(obj,propertyName,{
                get:function(){
                    //读取obj对象的propertyName属性时执行
                },
                set:function(currvalue){
                    //修改obj对象的propertyName属性时执行
                },
            });
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js实现vue双向数据绑定 利用访问器属性</title>
</head>
<body>
    <input bind-value="value" type="text" placeholder="请输入..."  id="user-input">
    <p bind-text="value" id="show-input"></p>
    <script>
    var elems=[document.getElementById('user-input'),document.getElementById('show-input')];
        var data={
            initValue:'',
        };
        function define(obj,propertyName) {
            Object.defineProperty(obj,propertyName,{
                get:function(){
                    return this.initValue;
                },
                set:function(currvalue){
                    this.initValue=currvalue;
                    //同步p
                    scan();
                },
            });
        }

        define(data,'value');
        data.value='';
        scan();
        //监听事件
        elems[0].addEventListener('keyup',function(e){
            var e=e||window.event;
            data.value=e.target.value;
        });
        function scan(){
            for(var i=0;i<elems.length;i++){
                var ele=elems[i];
                for(var j=0;j<ele.attributes.length;j++){
                    var attr=ele.attributes[j];
                    if(attr.nodeName.indexOf('bind')>=0){
                        elems[1].innerHTML=data.value;
                        elems[0].setAttribute('current-values',data.value);
                    }
                }
            }
        }
    </script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值