<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[warning]vue類的實現 **** 還記得Vue應該怎么使用吧? 看最下面代碼 代碼如下: ~~~ <script> // 1. 修改觀察者, 接收參數 function Watcher(vm, cb, exp) { this.vm = vm; // 虛擬DOM對象(vue實例對象) this.cb = cb; // 對應執行的function方法體 this.exp = exp; // 監聽哪個屬性 this.value = this.get(); // 調用一下下面的get方法, 把watcher對象提交到Dep訂閱者中 } Watcher.prototype = { // 2. 修改update方法, 觸發后把新值回調給new Watcher的地方 update: function() { // 拿到vue的data中的key對應的value let value = this.vm.data[this.exp]; // 獲取原有的value值 let oldVal = this.value; if (value !== oldVal) { // 把新值更新一下 this.value = value; // 值不同, 則調用Watcher執行, 把新的值傳過去 this.cb.call(this.vm, value); } }, get: function() { Dep.target = this; // 強制執行Object.defineProperty里的get方法, 把觀察者添加到Dep訂閱者數組中 let value = this.vm.data[this.exp]; Dep.target = null; return value; } }; // 3. 定義Vue類, 接收參數和監聽的key (注意暫時這里只能接收一個key) function Vue (options, exp){ // 獲取data對象 this.data = options.data(); // 獲取el根節點 let el = document.querySelector(options['el']); // 觸發Observer監聽data里所有key observe(this.data); // 初始化模板數據的值 el.innerHTML = this.data[exp]; // 實例化Watcher, 傳入Vue實例對象, 以及回調函數, 還有要觸發監聽的key值 // 4. Watcher執行, 更新el節點里的值 new Watcher(this, function(value){ el.innerHTML = value; }, exp); // 5. 返回Vue實例對象 return this; } </script> <div id="app">{{userName}}</div> <script> // 6. 仿照Vue定義, 傳入需要的參數 let app = new Vue({ el: "#app", data () { return { "userName": "hello VueJS" } } }, "userName"); setTimeout(()=>{ app.data.userName = "漂亮"; }, 2000); // 這時, 我們發現雛形已經出來了, 但是還有點不一樣, 但是我們在控制臺修改app.data.userName 確實實現了數據的綁定, 頁面發生了變化. </script> ~~~ [當前頁源代碼](https://github.com/lidongxuwork126com/ldx_vue/tree/master/%E4%BB%BFVue%E6%BA%90%E7%A0%81) 但是我們發現訪問data屬性必須先.data再.key, 很明顯這是不行的, 看下文如何改動
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看