歡迎留言交流小程序問題
歡迎留言交流小程序問題
歡迎留言交流小程序問題
我們新建一個組件test作為測試侣签,test組件的js代碼為:
? ? 之前我們講過辐宾,在properties里定義的是組件對外要開發(fā)的屬性春霍,在data里定義的是在組件里自己使用的私有的數(shù)據(jù),對小程序組件基礎(chǔ)不了解的横媚,可以看我前面的文章考赛,這是一個系列的 小程序里的自定義組件(一):基本概念
現(xiàn)在酥泛,我們在組件的properties里定義一個index為Number類型今豆,在data里定義一個year為Number類型嫌拣,定一個month為String類型,然后我們在組件的生命周期函數(shù)attached里打印出properties和data兩個對象呆躲,我們看看里面的值异逐。
? ? 我們看日志打印出來,發(fā)現(xiàn)兩個奇怪的現(xiàn)象:1插掂、對properties里index打印出來的默認(rèn)值是0应役,而對data下面的year和month都打印出JavaScript兩個內(nèi)置函數(shù),一個是String()燥筷、一個是Number()箩祥。2、不管我們打印的是this.properties還是打印this.data,他們的顯示結(jié)果是一模一樣的肆氓。其實我們在properties是沒有定義year和month的袍祖,在data里,是沒有定義index谢揪,為什么會這樣呢蕉陋?
? ? 首先我們解釋一下f String()和f Number(),看到f拨扶,其實我們就會想到函數(shù)凳鬓,所以我們打印出Number或者String的類型:console.log(typeof (Number)),發(fā)現(xiàn)他們是function患民,那為什么在properties里index打印出是0缩举,在data里year打印出來是一個函數(shù)呢?其實在小程序里匹颤,對properties里的數(shù)據(jù)做了處理仅孩,對data里的數(shù)據(jù)沒做處理。
如上圖:現(xiàn)在我們做個測試印蓖,我們給data里year設(shè)置了一個初始值0辽慕,給month設(shè)置了一個初始值“”,這樣打印出日志赦肃,發(fā)現(xiàn)就正常了溅蛉。
所以,得出一個結(jié)論:如果我們想對data里的數(shù)據(jù)做初始化他宛,我們必須自己給他初始值船侧。
現(xiàn)在我們解釋一下現(xiàn)象2:不管我們打印的是this.properties還是打印this.data,他們的顯示結(jié)果是一摸一樣的。其實我們在properties是沒有定義year和month的堕汞,在data里勺爱,是沒有定義index晃琳,為什么會這樣呢讯检?
其實在小程序里琐鲁,properties和data指向的是同一個js對象,換一種說法人灼,我們可以理解為:小程序會把properties對象和data對象合并成一個對象围段,這樣不管我們打印的是this.properties還是打印this.data,他們的顯示結(jié)果是一摸一樣的。
如上圖投放,現(xiàn)在我們再做一個測試奈泪,現(xiàn)在我們在data里再定義一個index,把它初始值設(shè)為12灸芳,我們打印日志涝桅,發(fā)現(xiàn)index打印出來還是0.
所以我們得出一個結(jié)論:我們不要把data和properties里的變量設(shè)置成同一個名字,如果他們名字相同烙样,properties里的會覆蓋data里的冯遂。
歡迎閱讀我的關(guān)于小程序組件的一系列文章