最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue的MVVM實(shí)現(xiàn)方法

 更新時(shí)間:2017年08月16日 16:59:25   作者:sunny519111  
本篇文章主要主要介紹了Vue的MVVM實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

本文介紹了Vue的MVVM實(shí)現(xiàn)方法,分享給大家,具體如下:

1. Object.defineProperty() 定義屬性

用意:給一個(gè)對(duì)象定義屬性,那個(gè)屬性原來(lái)是不存在的。這是一個(gè)初衷,屬性是不存在的,需要額外添加。

①、使用說(shuō)明

Object.defineProperty(obj,props)

第一個(gè)參數(shù)是將被添加或者修改的屬性的對(duì)象

第二個(gè)參數(shù)是一個(gè)對(duì)象,表示將要添加的一個(gè)或多個(gè)鍵值對(duì)一直要添加屬性的具體配置

{

​ '屬性名':{value:'...',writable:true},

​ '屬性名':{value:'...',writable:true}

}

②、屬性的getter和setter

  • 一般用于局部變量
  • 給構(gòu)造函數(shù)添加屬性
// get和set的方法不能和value以及writable一起使用
var o ={},
Object.defineProperty(o,'p',{
 get(){
   console.log('調(diào)用屬性后輸出')
 },
   set(val){
   console.log(val+'賦值屬性的時(shí)候調(diào)用')
   }
})
o.p // '調(diào)用屬性后輸出'
o.p = 'hcc' //hcc賦值屬性的時(shí)候調(diào)用
// 可以根據(jù)Object.getOwnPropertyDescriptor(對(duì)象, '屬性名')得到相應(yīng)的屬性配置

// 需求
//給一個(gè)對(duì)象的屬性值不能超過(guò)30,超過(guò)30的按照30來(lái)算
var hcc = {} //全局對(duì)象
{
 var age = null //局部變量
 Object.defineProperty(hcc,'age',{
   get(){
     return age //設(shè)置hcc.age的值
   },
   set(val){
     age= val> 30?30:val //當(dāng)賦值給hcc.age的值進(jìn)行判定從而改變局部變量age的值 
   }  
 })
}

③、使用場(chǎng)景

  // 簡(jiǎn)單的給元素添加屬性
  var obj = {name:'hcc'}
  Object.defineProperties(obj,{
   'name':{value:'haaaaa',writable:true},
   'age':{value:24,writable:false}
  })

細(xì)節(jié)

今天樓主上午在思考,一般使用Object.defineProperty()為什么需要使用局部變量呢?

所有樓主就下了下面的代碼

var obj = {}
Object.defineProperty(obj,'a',{
 get() {
  return 'gg';
 },
 set(value) {
  obj.a = value;
 }
})

解析: 為什么會(huì)出現(xiàn)堆溢棧呢 ? 我們?cè)谡{(diào)用 obj.a = 'ff' 的時(shí)候,觸發(fā)了set()方法,從而執(zhí)行了obj.a = value,又給obj.a進(jìn)行了賦值,調(diào)用set()方法,進(jìn)入了死循環(huán)。

總結(jié): 所以我們?cè)谑褂肙bject.defineProperty()的時(shí)候,都是通過(guò)一個(gè)私有變量或者一個(gè)局部變量來(lái)實(shí)現(xiàn)對(duì)象的屬性的賦值和設(shè)置。

// 局部變量,以一個(gè)變量為軀殼,設(shè)置返回值。
const obj = {}
{
 let bValue;
 Object.defineProperty(obj,'a',{
  get(){
   return bValue
  },
  set(value) {
   bValue = value;
  }
})
}
// 私有變量
const obj = {
 _data: {
  a: null
 }
}
Object.defineProperty(obj,'a', {
 get() {
  return obj._data.a
 },
 set(value) {
  obj._data.a = value
 }
})

總結(jié): Vue中進(jìn)行雙向綁定就是通過(guò)私有變量data實(shí)現(xiàn)的。是不是和Vue的結(jié)構(gòu)很相似。

實(shí)現(xiàn)Vue的雙向綁定

  • 實(shí)現(xiàn)改變?cè)氐闹档臅r(shí)候,dom進(jìn)行相應(yīng)的更新數(shù)據(jù)。
  • dom的值進(jìn)行更新的時(shí)候,元素的值同時(shí)也改變。

html部分

<div class="forms">
 <span>姓名</span> <input type='text' name="name">
 <span>年齡</span> <input type='text' name="age">
</div>

js部分

// 改變input的值得同時(shí)obj的值改變
const obj = {
 _data: {
  name: null,
  age: null
 }
}
const nameInput = document.querySelector('input[name]')
nameInput.addEventListener('input', (e) => {
  obj._data.name = e.target.value;
})
Object.definePeoperty(obj,'a',{
 get() {
  return obj._data.name
 },
 set(value) {
  nameInput.value = value;
  obj._data.name = value;
 }
})

// 簡(jiǎn)化
function bind(obj,dom) {
 let name = dom.getAttribute('name');
 Object.defineProperty(obj,name,{
  get() {
   return obj._data[name]
  },
  set(value) {
   dom.value = value;
   obj._data[name] = value;
  }
 })
 dom.addEventListener('input', (e) => {
  obj._data[name] = e.target.value;
 })
}
bind(obj,document.querySelector('input[name=name]'))
bind(obj,document.querySelector('input[name=age]'))


缺點(diǎn): 必須要事先的綁定dom。是不是和Vue里面的很想,必須事先申明data中的數(shù)據(jù),如果需要額外的添加數(shù)據(jù)的時(shí)候,必須通過(guò)Vue.set()來(lái)申明。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue對(duì)Element中的el-tag添加@click事件無(wú)效的解決

    Vue對(duì)Element中的el-tag添加@click事件無(wú)效的解決

    本文主要介紹了Vue對(duì)Element中的el-tag添加@click事件無(wú)效的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 解決elementUI 切換tab后 el_table 固定列下方多了一條線問(wèn)題

    解決elementUI 切換tab后 el_table 固定列下方多了一條線問(wèn)題

    這篇文章主要介紹了解決elementUI 切換tab后 el_table 固定列下方多了一條線問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • vue中如何實(shí)時(shí)監(jiān)聽(tīng)本地存儲(chǔ)

    vue中如何實(shí)時(shí)監(jiān)聽(tīng)本地存儲(chǔ)

    這篇文章主要介紹了vue中如何實(shí)時(shí)監(jiān)聽(tīng)本地存儲(chǔ),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue中的面包屑導(dǎo)航組件實(shí)例代碼

    vue中的面包屑導(dǎo)航組件實(shí)例代碼

    這篇文章主要介紹了vue的面包屑導(dǎo)航組件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • vue實(shí)現(xiàn)底部彈窗多選

    vue實(shí)現(xiàn)底部彈窗多選

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)底部彈窗多選,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue src動(dòng)態(tài)加載請(qǐng)求獲取圖片的方法

    vue src動(dòng)態(tài)加載請(qǐng)求獲取圖片的方法

    這篇文章主要為大家詳細(xì)介紹了vue src動(dòng)態(tài)加載請(qǐng)求獲取圖片的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 微信小程序使用uni-app一鍵獲取用戶信息

    微信小程序使用uni-app一鍵獲取用戶信息

    這篇文章主要介紹了微信小程序使用uni-app一鍵獲取用戶信息,需要的朋友可以參考下
    2023-01-01
  • vue.js仿hover效果的實(shí)現(xiàn)方法示例

    vue.js仿hover效果的實(shí)現(xiàn)方法示例

    這篇文章主要介紹了vue.js仿hover效果的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了vue.js事件響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-01-01
  • vue父子組件通訊的所有方法小結(jié)

    vue父子組件通訊的所有方法小結(jié)

    本文將介紹父組件與子組件之間傳遞數(shù)據(jù)的四種方法,以一個(gè)簡(jiǎn)單的小demo為例,通過(guò)實(shí)例全方位解析和代碼演示,便于大家理解,需要的朋友可以參考下
    2024-07-07
  • Vue.js中的computed工作原理

    Vue.js中的computed工作原理

    這篇文章,我們通過(guò)實(shí)現(xiàn)一個(gè)簡(jiǎn)單版的和Vue中computed具有相同功能的函數(shù)來(lái)了解computed是如何工作的。對(duì)Vue.js中的computed工作原理感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-03-03

最新評(píng)論

黑水县| 阳新县| 获嘉县| 阳原县| 将乐县| 衡东县| 平乐县| 宁强县| 报价| 萍乡市| 大理市| 景谷| 泽普县| 宾阳县| 中方县| 东平县| 义乌市| 兰坪| 吴堡县| 英山县| 北安市| 兰考县| 宁武县| 都兰县| 上饶市| 淮南市| 古浪县| 临沧市| 呼玛县| 临潭县| 始兴县| 陵川县| 钟山县| 苗栗市| 定南县| 陇南市| 安达市| 广饶县| 岳池县| 永安市| 利川市|