vue核心思想

vue核心思想:
  • MVVM框架:
    dom-viewmodel-model
  • 組件化
  • 數(shù)據(jù)的雙向綁定:
    1)常規(guī)思路:
    用keyup事件監(jiān)聽,獲取改變的值賦值給另一個對象的text。
    2)vue思路:
    vue采用數(shù)據(jù)劫持結(jié)合發(fā)布者訂閱者模式,通過Object.defineProperty()來劫持各個屬性的setter,getter,在數(shù)據(jù)變動時發(fā)布消息給訂閱者,觸發(fā)相應(yīng)的監(jiān)聽回調(diào)。
Object.defineProperty(obj,"username",{
    set:function(newVal){

    },
    get:function(){

    }
})

接受三個參數(shù):
obj:目標(biāo)對象
username:需要定義的屬性或者方法的名字
{}:目標(biāo)屬性所擁有的特性(decriptor)
descriptor:
value:屬性的值
configurable:總開關(guān),一旦為false,就不能設(shè)置其他的了(value,configurable,enumerable)
enumerable:是否能在for in循環(huán)中遍歷出來火災(zāi)Object.keys中列舉出來。
wriatable可寫
以上三個(除了value)用Object.defineProperty()定義時默認(rèn)為false屬性,若直接在對象上定義屬性,默認(rèn)為true

訪問器屬性:

configurable
enumerable
set和get:set是當(dāng)給屬性username賦值新屬性的時候觸發(fā),get是獲取username的時候觸發(fā)。
注意:在 descriptor 中不能 同時設(shè)置訪問器 (get 和 set) 和 wriable 或 value,否則會錯,就是說想用(get 和 set),就不能用(wriable 或 value中的任何一個)

實(shí)現(xiàn)代碼
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        window.onload=function(){
            var obj={};
            Object.defineProperty(obj,"userName",{
                get:function(){

                },
                set:function(newVal){
                    document.getElementById('uName').innerText=newVal;
                    document.getElementById('username').value=newVal;
                }
            })
            document.getElementById("username").addEventListener("keyup",function(){
                obj.userName=event.target.value;
            })
        }
    </script>
</head>
<body>
    <input type="text" id="username">
    <span id="uName"></span>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。