欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

vue compute 對象變了

在Vue中,我們經(jīng)常會使用computed屬性去計算一些屬性值,Vue會根據(jù)依賴自動更新這些屬性。而在computed屬性中我們還可以使用一個特殊的對象,叫做“計算屬性緩存對象”,這個對象包含了computed函數(shù)的執(zhí)行狀態(tài),包括緩存值、依賴等信息。

const vm = new Vue({
data() {
return {
name: '張三',
age: 18
}
},
computed: {
cName() {
return `我的名字是${this.name}`
},
cAge: {
get() {
return `我今年${this.age}歲`
},
set(value) {
this.age = value
}
}
}
})
console.log(vm.$options.computed.cName.__computeCache) // 計算屬性緩存對象
console.log(vm.$options.computed.cName.__computeDeps) // 計算屬性依賴

上述代碼中,我們通過訪問Vue實(shí)例的$options屬性可以找到computed屬性中定義的計算屬性緩存對象和計算屬性依賴。這些信息是在運(yùn)行時被存放到計算屬性緩存對象中的。

但是,如果在極端情況下,我們手動修改了計算屬性緩存對象或者計算屬性依賴,那么就可能導(dǎo)致計算屬性的狀態(tài)發(fā)生異常,Vue無法正常管理計算屬性了。

const vm = new Vue({
data() {
return {
name: '李四',
age: 20
}
},
computed: {
cName() {
return `我的名字是${this.name}`
},
cAge: {
get() {
return `我今年${this.age}歲`
},
set(value) {
this.age = value
}
}
}
})
const cache = vm.$options.computed.cName.__computeCache
const deps = vm.$options.computed.cName.__computeDeps
// 修改緩存值
cache.value = '王五'
// 修改依賴
deps[0].__callbacks[0] = function() {}
console.log(vm.cName) // 輸出:'王五'

上述代碼中,我們手動將計算屬性緩存對象的值修改為"王五",而且還將計算屬性依賴的回調(diào)函數(shù)修改為一個空函數(shù),這樣就會導(dǎo)致計算屬性的狀態(tài)變?yōu)楫惓顟B(tài)了,在console中可以看到我們已經(jīng)成功修改計算屬性的值為"王五"了。

總之,在使用Vue計算屬性時,我們應(yīng)該避免手動修改計算屬性緩存對象和依賴,如果確實(shí)需要修改,那么一定要謹(jǐn)慎操作,以免引起計算屬性異常。