8

<body>

<h1 id="h1">
</h1>
<input type="text" id="input">
<button id="button">change</button>
<script>
    var data = {
        msg : "我是一个数据"
    }

    **页面上的初始化**

    h1.innerText = data.msg
    input.value = data.msg
    
  

Object.defineProperty(obj, prop, descriptor)

参数说明:

      1. obj:目标对象
      2. prop 需定义或修改的属性的名字  
      3. descriptor 目标属性所拥有的特性 
              
     数据劫持 , 这个api可以对一个对象的属性进行精确的控制
     控制这个属性能够被赋值 能够被重写 能否被获取
     控制这个属性的读取 或者 写入 
       

get/set

    **get 获取值  或者叫 读取**
    **set 设置值  或者叫 赋值**
    
    Object.defineProperty(data,"msg",{
        get(){
             **当我获取msg的值的时候 我希望获取到的是什么结果呢?**
            return input.value
        },
        set(newValue){
              **当我给msg属性赋值的时候 我希望做一些事情**
              **data.msg ="咳咳"**
              **因为要模拟双向数据绑定 那么得到的新的值 input与h1中的内容也要跟新的值一致**
              **实际上在vue的底层这一步是通过观察者 / 订阅者模式实现**
            h1.innerText = newValue;
            input.value = newValue
        }
    })

    button.onclick = function(){
        data.msg += 1
    }

    input.onkeyup = function(){
         **当键盘抬起的时候 我们让 data.msg 获取新的值 也就是对data.msg 重新赋值**
        data.msg = input.value
        console.log(data.msg)
    }

</script>

</body>


HappyCodingTop
526 声望847 粉丝

Talk is cheap, show the code!!


« 上一篇
reset.css