第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關(guān)于自己封裝類似vue中watch監(jiān)聽事件的一個問題

關(guān)于自己封裝類似vue中watch監(jiān)聽事件的一個問題

四季花海 2019-03-21 22:15:18
先上代碼----// pages/three/three.jsPage({  /**   * 頁面的初始數(shù)據(jù)   */  data: {    name:"",    age:"",    sex:""  },   onLoad: function (options) {    this.setWatch(this);    console.log(this)  },  watch:{    name(){      console.log('我是name')      console.log(111111)    },    age(){      console.log(this.data.name)      console.log('我是age')    },    sex(){      console.log('sex')    }  },    onReady: function () {  },  btn(){       this.setData({      name:1    })    },  setWatch(){     let watch=this.watch;     let _this=this;    // Object.keys(watch).forEach(v=>{    //   console.log(v)    //   var setVal = _this.data[v];    //   Object.defineProperty(_this.data,v,{    //     configurable: true,    //     enumerable: true,    //     get:function(){    //       return setVal    //     },    //     set:function(val){    //       setVal=val;    //       _this.watch[v].call(_this);    //     }    //   })    // })     for(var v in watch){       console.log(v)       var setVal=_this.data[v];       Object.defineProperty(_this.data,v,{         configurable: true,         enumerable: true,         get:function(){           return setVal         },           set:function(val){           setVal=val;           console.log(_this.watch[v])           _this.watch[v].call(_this);         }       })     }      }})我用for(var i in obj){}來給對象添加get和set方法的時候,監(jiān)聽的事件永遠只是watch對象里的最后一個方法,就是說,不管我修改name還是age的值,執(zhí)行的都是watch里的sex方法,但是我用Object.keys(obj)來添加的時候,執(zhí)行的事件卻是正常的,求大佬解決
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經(jīng)驗 獲得超1個贊

你這樣寫v肯定是watch最后的那個屬性

es6比較簡單,可以直接用let把v聲明為塊級作用域變量來實現(xiàn)


for(let v in watch){

看你還在用es5寫法,可以寫個閉包把鍵名v當(dāng)參數(shù)傳進去就行了


for (var v in watch) {

  (function (v) {

    //你的代碼

  })(v)

}

解釋下原因,你用var聲明,存在一個變量提升的概念,因為es6之前js沒有塊級作用域的說法,你寫出來的代碼是這樣的


setWatch(){

  for (var v in watch) {

  }

},

變量提升后是這樣的


setWatch() {

  var v;

  for (v in watch) {

  }

},

這樣的結(jié)果就是for循環(huán)中最新的屬性名不斷對同一個變量賦值,最終你在回調(diào)內(nèi)讀取這個v的時候結(jié)果并不是你想要的,你只能讀到最后那個屬性


查看完整回答
反對 回復(fù) 2019-04-14
  • 2 回答
  • 0 關(guān)注
  • 988 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號