Object.defineProperty 監(jiān)聽(tīng)攔截中存在的一些問(wèn)題
@:Vue框架中監(jiān)聽(tīng)數(shù)組屬性值的變化
Object.defineProperty(x, '?' , {})無(wú)法指定數(shù)組中需要監(jiān)聽(tīng)的屬性值
這時(shí)我們通過(guò)變異的方法來(lái)處理(攔截push方法)
??
let arr = [1,2,3]
let push = Array.prototype.push;
Array.prototype.push = function (...args) {
? ? console.log( '變異方法' ) // 監(jiān)聽(tīng)處理
? ? push( ...args )? // 這里需要處理this指向問(wèn)題
? ? push.call( this, ...args )
}
arr.push(args)
上面通過(guò)重寫(xiě)push方法來(lái)處理,當(dāng)有push方法調(diào)用時(shí)會(huì)執(zhí)行我們自定義的push方法,每次有push動(dòng)作都會(huì)被監(jiān)聽(tīng)到了
上面只是一個(gè)栗子
數(shù)組方法: push pop shift unshift splice sort reverse 都可以用這種方法處理
有些數(shù)組方法為啥沒(méi)改寫(xiě)?
這是因?yàn)橄駀ilter map 這些方法 并不是改原有數(shù)組,而是返回一個(gè)新數(shù)組
本人的一點(diǎn)總結(jié),如有不足之處,多多指點(diǎn)