<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## defineProperty基本使用 對象添加屬性的方式有很多種,`defineProperty`便是有一種,而且寫起來還不太方便——不是嗎!但存在即使合理的。 * 定義兩個基礎對象 ``` js var person = { name: '張三', sex: 0 } var job = { type: 'java', time: 3, age: 18 } ``` * enumerable控制屬性是否可被枚舉 ``` js Object.defineProperty(person,'age',{ value: 18 }) console.log(person,job) ``` ![](https://img.kancloud.cn/18/de/18de5dd8384241e4f227301398214d83_933x501.png) 變為可被枚舉,只需要enumerable: true即可 ``` js Object.defineProperty(person,'age',{ value: 18, enumerable: true // 默認是false }) ``` ![](https://img.kancloud.cn/aa/6b/aa6b879cabc75e5717a93b3255ce1615_1135x245.png) * writable控制屬性是否可被修改 ```js Object.defineProperty(person,'age',{ value: 18, enumerable: true, writable: true // 默認是false }) person.age = 20 job.age = 21 console.log(person,job,Object.keys(person),Object.keys(job)) ``` 當 writable: false時 ![](https://img.kancloud.cn/16/2b/162b9068c83a1e8089bba4c405061889_650x278.png) 當 writable: true時 ![](https://img.kancloud.cn/5e/c5/5ec5ca598675daaa73c54b0bc6ea5eec_619x309.png) * configurable控制屬性是否可被刪除 ``` js Object.defineProperty(person,'age',{ value: 18, enumerable: true, writable: true, configurable: true // 默認是false }) delete person.age delete job.age console.log(person,job,Object.keys(person),Object.keys(job)) ``` 當 configurable: false時 ![](https://img.kancloud.cn/55/3a/553af4e29ff0af2941ffe40b9e15a284_565x300.png) 當 configurable: true時 ![](https://img.kancloud.cn/a6/fc/a6fc9aeea434eaf7d0ff69364e707627_520x293.png) ## 高級用法,數據代理 * getter的使用,如下如,是否看出有何區別?首先person.age一開始他應該是(...)的,作為一個映射,當你點擊(讀取)時,他才回去真正去讀取這個實際值 getter補充:即使get:function(){}放到一起(key:value)可以稱之為getter,或者get函數稱之為getter。下面的setter也應該也不難理解了。 ![](https://img.kancloud.cn/1a/a3/1aa38f8c8e55dfb776ae0d263909ca69_1076x662.png) * setter的使用,當一開始number=20,當通過修改number(第3步)的值,person.age在跟著變化,當改變person.age(第4步)時,number最后也跟著變化 ![](https://img.kancloud.cn/1f/72/1f723a32e01f37071c02bc7790471b60_1224x928.png) * 總結,當兩個看起來不相關的對象(變量),可通過Object.defineProperty()方法的getter和setter進行關聯(映射、代理)起來,實現“同步更新”操作。 ## Vue中的應用 * 弄清楚Vue中的data定義的數據,我們看下圖VsCode中的代碼,當訪問data中的數據,是否有以下兩個疑問? 1. 是否想到vm.data.name呢? 2. data中的數據怎么可以vm.name下就能訪問到? 解答問題1: 1. vm.data確實存在,只不過把數據存放在vm._data中,驗證如下 ![](https://img.kancloud.cn/16/1a/161ac8d55108931c4d7a49f238eaf910_1002x435.png) 解答問題2: 1. vm.name只不過是一個映射(代理)出來,當_data中的數據改變,則vm.name也被自動更新。 ![](https://img.kancloud.cn/5b/ce/5bce45fcd8f9c564ca526a2487ae98c4_1370x409.png) 2. 而真正實現數據互動,則是通過箭頭3的getter和setter為變量name服務,從而實現讀取時同步。 ![](https://img.kancloud.cn/06/03/0603d303f1e2db5c42da55ac7b664838_1578x907.png) 3. 當我們通過實例vm去獲取或者去更改,則同步修改vm.data.xxx數據。 ![](https://img.kancloud.cn/b6/56/b656b66bac026a79f63976788cfaab8d_1585x678.png) 4. 雖然如解答1中所示vm._data===data,但是在_data中做了一下升級,這是作為劫持使用的,當數據被修改,通過viewModel中數據劫持(監聽到數據變化)更新視圖,這個在這里就不展開講,后面單獨出文。 ![](https://img.kancloud.cn/e6/67/e66734ba04595be717b656ae54c76f64_571x194.png) 總結:在Vue的data,做了一次數據代理,把data中的數據代理到實例上,為了編碼變得更方便。
                  <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>

                              哎呀哎呀视频在线观看