2017-08-03讀書筆記(js監(jiān)聽對象屬性改變)

今天本來想繼續(xù)看Webpack业筏,但是無奈公司上線到11點(diǎn)姨俩,沒有多少時間,就先看一篇別的文章 js監(jiān)聽對象屬性改變北戏。

公司用的框架是backbone,但是正在轉(zhuǎn)型為react漫蛔,但是個人非常喜歡backbone中對model的有一個listenTo的方法嗜愈,可以監(jiān)聽對象的所有變化,就可以在回調(diào)函數(shù)中直接修改別處的樣式莽龟。在一個對象渲染于多處卻需要挨個修改的情況下蠕嫁,這樣可以節(jié)省一部分的去尋找并修改的精力,讓代碼更好讀毯盈、易理解剃毒。

所以在網(wǎng)上廣泛的尋找能行的替代解決方案(當(dāng)然我也不是很清楚react到底有沒有類似功能,目前使用程度還不太深)搂赋。然后就找到了這篇文章赘阀。

文章中提到的方法是用的ES5提供的Object.defineProperty函數(shù)。

Object.defineProperty(user, 'name', {
    set:function(key,value){
        //此處攔截了設(shè)置請求
    }
});

文章中還講說脑奠,如果為user增加一個新的屬性基公,比如user里沒有id屬性,增加一個 user.id=1宋欺,Object.defineProperty函數(shù)是不知道存在'id'的轰豆,也就無法寫出上面的代碼,這可以用ES6提供的Proxy代理處理齿诞,代碼如下:

var user = new Proxy({},{
   set:function(target,key,value,receiver){
       //處理代碼
   }
})

如果使用這種方法酸休,我覺得可以專門加一層collection的感覺,在一個對象中定義所有的屬性祷杈,之后所有的新建都可以是new一個這個對象斑司,并繼承這個初始對象的所有屬性,之后就基本只有修改的話可以只用defineProperty函數(shù)就可以了吠式。

function extend(parent){
    var child={};
    for(var i in parent){
        child[i]=parent[i];
    }
    child.uber=parent;
    return child;
}

可以用這個extend方法來繼承所有的屬性陡厘。當(dāng)然也可以用es6的class和extends來實現(xiàn)繼承抽米。

公司項目準(zhǔn)備將ajax、backbone的fetch等進(jìn)行整合糙置,準(zhǔn)備使用axios來統(tǒng)一的進(jìn)行http請求云茸,到時候一旦將backbone的fetch去掉,使用axois谤饭,可以自己嘗試封裝一下标捺。當(dāng)然,最簡單的還是將json傳入model層中自動轉(zhuǎn)化為backbone的model揉抵,就能直接使用listenTo也不需要改太多代碼了亡容。

另外附一份代碼,也是封裝過的可以實現(xiàn)對象屬性監(jiān)聽的代碼冤今。

//簡單對象的屬性的變化監(jiān)控
//通過setAttr改變屬性的值
  
var o = {
  'a':2,
  'b':3
};
function watch(obj, attr, callback){
   if(typeof obj.defaultValues == 'undefined'){
      obj.defaultValues = {};
      for(var p in obj){
        if(typeof obj[p] !== 'object') 
            obj.defaultValues[p] = obj[p];
      }
   }
   if(typeof obj.setAttr == 'undefined'){
      obj.setAttr = function(attr, value){  
              if(this[attr] != value){
                this.defaultValues[attr] = this[attr];
                this[attr] = value;
                return callback(this);
              }
              return this;             
       };
   } 
}
watch(o, 'a', function(obj){
  console.log(obj);
});
o.setAttr('a',4);

明天繼續(xù)Webpack

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闺兢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子戏罢,更是在濱河造成了極大的恐慌屋谭,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件龟糕,死亡現(xiàn)場離奇詭異桐磁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)讲岁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門我擂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缓艳,你說我怎么就攤上這事校摩。” “怎么了郎任?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵秧耗,是天一觀的道長。 經(jīng)常有香客問我舶治,道長分井,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任霉猛,我火速辦了婚禮尺锚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惜浅。我一直安慰自己瘫辩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伐厌,像睡著了一般承绸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挣轨,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天军熏,我揣著相機(jī)與錄音,去河邊找鬼卷扮。 笑死荡澎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晤锹。 我是一名探鬼主播摩幔,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鞭铆!你這毒婦竟也來了或衡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤车遂,失蹤者是張志新(化名)和其女友劉穎薇宠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艰额,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年椒涯,在試婚紗的時候發(fā)現(xiàn)自己被綠了柄沮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡废岂,死狀恐怖祖搓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情湖苞,我是刑警寧澤拯欧,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站财骨,受9級特大地震影響镐作,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隆箩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一该贾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捌臊,春花似錦杨蛋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曙寡。三九已至,卻和暖如春寇荧,著一層夾襖步出監(jiān)牢的瞬間举庶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工砚亭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灯变,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓捅膘,卻偏偏與公主長得像添祸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寻仗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 寫在前面 backbone是我兩年多前入門前端的時候接觸到的第一個框架刃泌,當(dāng)初被backbone的強(qiáng)大功能所吸引(當(dāng)...
    浙大javascript聯(lián)盟閱讀 1,138評論 0 5
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,097評論 25 707
  • 蒲扇 又是伏天,天熱的如蒸籠署尤, 無處不是熱烘烘耙替,把人折騰。現(xiàn)代化設(shè)施空調(diào)曹体, 在此季節(jié)大顯神功俗扇, 空調(diào)一開, 室內(nèi)瞬...
    阿超Lilian閱讀 348評論 0 0
  • 說起“偽裝”的確是很奇特的事箕别。尤其在生物界铜幽! 當(dāng)兒子指著草叢“看,爸爸串稀,有甲蟲除抛!”我的第一反應(yīng)是“在哪兒呢!” 當(dāng)...
    黃曜升閱讀 299評論 0 1
  • 晚上11點(diǎn)多母截,公司集體宿舍內(nèi)到忽,旁邊的同事已經(jīng)睡下了,還響起了輕微的鼾聲清寇,想必她們是進(jìn)入夢鄉(xiāng)了吧喘漏。可是颗管,我卻久久不能...
    溫暖的向日葵閱讀 513評論 6 5