真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Vue模擬實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的示例分析-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“Vue模擬實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Vue模擬實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的示例分析”這篇文章吧。

在太平等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷(xiāo),外貿(mào)網(wǎng)站建設(shè),太平網(wǎng)站建設(shè)費(fèi)用合理。

一、前言

之前實(shí)現(xiàn)了為每個(gè)對(duì)象擴(kuò)展一個(gè)$set方法,用于新增屬性使用,這樣就可以監(jiān)聽(tīng)新增的屬性了。

當(dāng)然,數(shù)組也是對(duì)象,也可以通過(guò)$set方法實(shí)現(xiàn)新增屬性。

但是,對(duì)于數(shù)組而言,通常我們是通過(guò)push之類(lèi)的方法吧。

PS:Vue中明確指出push、pop、shift、unshift、splice、sort、reverse方法為變異方法,可以通過(guò)它們監(jiān)聽(tīng)屬性變化,觸發(fā)視圖更新(詳情見(jiàn)here)

下面,我們就一起來(lái)實(shí)現(xiàn)這些Array的變異方法吧。

注:我們將Array變異方法實(shí)現(xiàn),也寫(xiě)在extendObj.js中的,因?yàn)閿?shù)組也是對(duì)象嘛。

二、Array變異方法實(shí)現(xiàn)

要實(shí)現(xiàn)這些變異方法,毫無(wú)疑問(wèn),我們會(huì)重寫(xiě)它們,那在Array.prototype里面重寫(xiě)嗎?

當(dāng)然不是,這樣不就影響了所有數(shù)組對(duì)象的原型鏈了么!

為了避免這種情況,且,我們只是想在監(jiān)聽(tīng)數(shù)據(jù)對(duì)象上繼承這些變異數(shù)組方法,那么細(xì)心的你會(huì)發(fā)現(xiàn),其實(shí)與我們?cè)?模擬Vue之?dāng)?shù)據(jù)驅(qū)動(dòng)3"中實(shí)現(xiàn)$set方法類(lèi)似了。

首先,我們創(chuàng)建arrKeys對(duì)象用于保存需要變異的數(shù)組方法以及恒定對(duì)象extendArr,如下:

let arrKeys = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'];
const extendArr = [];

接著,就是在extendArr對(duì)象上,一一監(jiān)聽(tīng)arrKeys中的方法了,與$set方法類(lèi)似,整體結(jié)構(gòu)如下:

!function(){
  arrKeys.forEach(function(key){
    proxyObject(extendArr, key, function(){
      //TODO
    });
  });
}();

注:proxyObject方法其實(shí)核心就是Object.defineProperty,詳見(jiàn)"模擬Vue之?dāng)?shù)據(jù)驅(qū)動(dòng)3".

接下來(lái),就是實(shí)現(xiàn)核心部分代碼了,重寫(xiě)這些方法的目的,是為了監(jiān)聽(tīng)數(shù)據(jù)變化,所以要在方法原有功能不變的情況下,重寫(xiě)它們,Array.xxx.apply即可實(shí)現(xiàn)原有功能。

且,push、unshift、splice這三個(gè)方法可以在原數(shù)組中,新增屬性,故而,我們需要監(jiān)聽(tīng)新增屬性以及它們的屬性值,這里就和$set方法完全一樣了,通過(guò)$Observer,即可利用observe以及convert方法實(shí)現(xiàn)了。

實(shí)現(xiàn)代碼如下:

!function(){
  arrKeys.forEach(function(key){
    proxyObject(extendArr, key, function(){
      console.log('Fun ' + key + ' is observed');
      let result;
      let arrProto = Array.prototype;
      let ob = this.$Observer;
      let arr = arrProto.slice.call(arguments);
      let inserted;
      let index;
      switch(key){
        case 'push': {
          inserted = arr;
          index = this.length;
          break;
        }
        case 'unshift': {
          inserted = arr;
          index = 0;
          break;
        }
        case 'splice': {
          inserted = arr.slice(2);
          index = arr[0];
          break;
        }
      }
      result = arrProto[key].apply(this, arguments);
      if(inserted){
        inserted.forEach(val => {
          ob.observe(val);
          ob.convert(index++, val);
        });
      }
      return result;
    });
  });
}();

最后,就是在需要監(jiān)聽(tīng)的對(duì)象上繼承這些變異方法咯,如下:

//observer.js
function Observer(data){
  if(!(this instanceof Observer)){
    return new Observer(data);
  }
  data.__proto__ = extendObj;
  //繼承變異方法push、pop等等
  if(Array.isArray(data)){
    data.__proto__.__proto__ = extendArr;
  }
  this.data = data;
  this.walk(data);  
}

好了,一切完畢,接下來(lái)就測(cè)試下唄:



效果如下:

Vue模擬實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的示例分析

以上是“Vue模擬實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享標(biāo)題:Vue模擬實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的示例分析-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/jdhjh.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部