VUE計算屬性原理

2022-09-06 09:57:10 字數 2019 閱讀 4757

先溫習下object.defineproperty

var obj ={};

function

definereactive(obj,key,val)

});}definereactive(obj,'a',0);

console.log("obj",obj);

obj.a = 10;

console.log("obj.a",obj.a); //

0,定義無效,貌似只能賦值一次

definereactive(obj,'a',8);

console.log("obj.a",obj.a); //

cannot redefine property: a

**:

var obj ={};

var dep = null

;function

definereactive(obj,key,val)

console.log("valx is:",val);

return

val;

},set:

function

(newval)

});}//

obj.b唯讀

function

definecomputed(obj,key,func);

value = func(); //

執行了 this.a-->get-->列印val = 0;

dep = null

;

"dep isx:",dep);

//大量閉包,直接給b賦值沒有效果,只能讀取obj.b了。

object.defineproperty(obj,key,

});}definereactive(obj,'a',0);

definecomputed(obj,'b',function

());

console.log(obj.b);

"obj.a=",obj.a);

console.log("obj.a=",obj.a);

obj.a +=1; //

obj.a = obj.a + 1;

console.log(obj.b);

obj.a +=1;

console.log(obj.b);

obj.a +=1;

console.log(obj.b);

很繞,難點是下面**會執行兩次a的get函式。第二次在set函式中的執行value = func(); func函式有this.a中執行了get。並+1賦值給閉包變數value。set函式結束之後。obj.a + 1;而

obj.a +=1;  //

obj.a = obj.a + 1;

vue對computer中的屬性處理分兩步,

先處理為vm._computedwatchers物件,每個key對應乙個watch例項。watch在初始的時候執行。

if (this

.computed) else

後是給key都賦值vm中,並且vm.key也進行資料劫持:

object.defineproperty(target, key, sharedpropertydefinition)

= shouldcache

//? createcomputedgetter(key)

//: userdef

= noop

createcomputergetter(key) 是關鍵:它和上面的原理類似。接下來mount,

updatecomponent = () =>

_render()執行:vnode = render.call(vm._renderproxy, vm.$createelement) 得到乙個vnode。render是在vue.prototype.$mount 解析模板形成的ast。

_update會到vnode對映到dom節點中去,

原理 vue雙向資料繫結原理以及計算屬性

手寫乙個vue雙向資料繫結以及計算屬性 雙向資料繫結是以object.defineproperty obj,a 1 屬性為核心,整體看的時候比較懵。我在下面進行了顏色以及序號分組,如果原生js不是很好的話,要多看幾遍,下面 進行了大量的注釋,盡可能的方便理解。一 演示 二 演示 a的值 p b的值 ...

vue 計算屬性

在這裡我覺得講 computed 和methods放在一起討論 更 便於 理解。computed var vm new vue computed methods methods methods和computed從顯示效果是一樣的,但是主要的區別是 1.computer 是存在快取的,在data沒有改...

Vue 計算屬性

計算屬性在處理一些複雜邏輯時是很有用的。模板是為了描述檢視的結構。在模板中放入太多的邏輯會讓模板過重且難以維護。這就是為什麼 vue.js 將繫結表示式限制為乙個表示式。如果需要多於乙個表示式的邏輯,應當使用計算屬性 computed。例項1 反轉字串 例項1中模板複雜,不好理解,現在我們採用計算屬...