美文网首页
手写实现一个Object.defineproperty对数据的监

手写实现一个Object.defineproperty对数据的监

作者: Fanny | 来源:发表于2021-09-22 14:41 被阅读0次
    image.png
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <div>
        <ul id="app">
          <li>1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
        </ul>
      </div>
      <script>
        let data = {}
    
        //vm模拟的是vue的实例
        let vm = {};
    
        let _ul = document.getElementById('app');
        let _li = document.getElementsByTagName('li');
    
        for (let i = 0; i < _li.length; i++) {
          const element = _li[i];
          element.setAttribute('numIndex',(+element.textContent)-1)
          data[`msg${i}`] = 'nihao'+i;
          if(i % 2 == 0){
            element.style.backgroundColor = '#e8afc5'
          }else{
            element.style.backgroundColor = '#ab96c5'
          }
        }
        _ul.onclick = function(e){
          vm[`msg${e.target.getAttribute('numIndex')}`] = '666-' + (Number(e.target.getAttribute('numIndex')) + 1);
        }
    
        Object.keys(data).forEach((k,index)=>{
          Object.defineProperty(vm,k,{
            get(){
              _li[index].textContent = data[k];
              return data[k];
            },
            set(value){
              data[k] = value;
              _li[index].textContent = data[k];
              return;
            }
          })
        })
        
      </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:手写实现一个Object.defineproperty对数据的监

          本文链接:https://www.haomeiwen.com/subject/zntggltx.html