最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

你知道vue data為什么是一個函數(shù)

 更新時間:2021年11月10日 17:29:35   作者:943987243  
本篇文章從javascript原型鏈來解釋為什么vue中data必須是一個函數(shù),解釋一下這部分的原理內容,感興趣的朋友跟隨小編一起看看吧

官網解釋:當一個組件被定義,data 必須聲明為返回一個初始數(shù)據(jù)對象的函數(shù),因為組件可能被用來創(chuàng)建多個實例。如果 data 仍然是一個純粹的對象,則所有的實例將共享引用同一個數(shù)據(jù)對象!通過提供 data 函數(shù),每次創(chuàng)建一個新實例后,我們能夠調用 data 函數(shù),從而返回初始數(shù)據(jù)的一個全新副本數(shù)據(jù)對象。我看到這個問題的時候是我面試的時候一個面試官問我的,當時懵了,從來沒有想過為什么,只知道代碼需要這么寫。最近有空再來了解一下這部分的原理內容。有兩個我比較喜歡回答  

1.是為了在重復創(chuàng)建實例的時候避免共享同一數(shù)據(jù)造成的數(shù)據(jù)污染  

2.寫函數(shù)的原因是為了保證這個對象是獨立的,如果可以保證對象是惟一的,也可以不寫函數(shù)直接寫對象。

其實歸根結底就是為了避免數(shù)據(jù)污染。

我們想要解決這個問題就不得不說原型鏈和this。

相關知識可以自行去了解。在原型鏈中對象共享公共的屬性和方法。

person1和person2是Person的引用,所以當person2改變數(shù)據(jù)是實際上更改的是Person的的數(shù)據(jù)。既然Person的數(shù)據(jù)改變了,所以Person的引用person1也會被改變

function Person(){
 }
 Person.prototype.datas={
   a:"c",
   f:'h'
 }
 var person1 = new Person()
 var person2 = new Person()
 person2.datas.a="wewew"
 console.log(person2)
 console.log(person1)

我之前一直有一個疑問既然person1和person2都是Person的引用為什么放在對象里面會造成數(shù)據(jù)污染但是放在方法里就不會造成數(shù)據(jù)污染了呢?首先要知道一句話:this的指向在函數(shù)定義的時候是確定不了的,只有在函數(shù)執(zhí)行的時候才能確定this到底指向誰,實際上this指向調用它的對象。又有一個疑問了,明明指向的是同一個方法為什么會有不一樣的呢?難道克隆了一個?答案:定義在構造函數(shù)內部的方法,會在它的每一個實例上都克隆這個方法;定義在構造函數(shù)的prototype屬性上的方法會讓它的所有示例都共享這個方法,但是不會在每個實例的內部重新定義這個方法引用:http://m.fzitv.net/article/199830.htm

function Person(){
    this.datas = this.sayHello()//this指向調用它的對象
  }
  Person.prototype.sayHello = function () {
      return{
        d:1,
        b:2
      }
    };
  var person1 = new Person()
  var person2 = new Person()
  person2.datas.d="wewew"
  console.log(person1)
  console.log(person2)

  具體例子如下 

1.正常狀態(tài) 當使用data函數(shù)的時候沒有造成數(shù)據(jù)污染

<em id="__mceDel">ButtonTest.vue<br><template>
  <div>
    <div>{{ count }}</div>
    <button @click="onAdd">增加</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      count: 0,
    };
  },
  methods: {
    onAdd() {
      this.count++;
    },
  },
};
</script><br></em>
Home.vue
<template>
  <div class="home">
    <button-test></button-test>
    <button-test></button-test>
  </div>
</template>
 
<script>
import ButtonTest from "@/components/ButtonTest.vue";
export default {
  name: "Home",
  components: {
    ButtonTest,
  },
};
</script>

  

2.若data直接定義成一個對象則會報錯

3.定義一個外部對象的形式,結果點擊一個按鈕,兩個數(shù)據(jù)同時增加,造成數(shù)據(jù)污染

到此這篇關于vue data為什么是一個函數(shù)?的文章就介紹到這了,更多相關vue data 函數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue項目中,main.js,App.vue,index.html的調用方法

    vue項目中,main.js,App.vue,index.html的調用方法

    今天小編就為大家分享一篇vue項目中,main.js,App.vue,index.html的調用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue2?利用echarts?單獨繪制省份的步驟

    vue2?利用echarts?單獨繪制省份的步驟

    這篇文章主要介紹了vue2?利用echarts?單獨繪制省份,首先引入所需要的第三方模塊,通過示例代碼給大家介紹的非常詳細,文章末尾給大家補充介紹了vue2.x結合echarts2實現(xiàn)顯示具體省份熱力圖的問題,需要的朋友可以參考下
    2022-01-01
  • vue2項目增加eslint配置代碼規(guī)范示例

    vue2項目增加eslint配置代碼規(guī)范示例

    這篇文章主要為大家介紹了vue2項目增加eslint配置代碼規(guī)范示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Vue3組件間的通信方式詳解

    Vue3組件間的通信方式詳解

    這篇文章主要介紹了Vue3組件間的通信方式,在使用vue時,我們經常會把不同的模塊拆分成不同的組件,而組件之間有的需要傳遞數(shù)據(jù),所以組件間的數(shù)據(jù)通信就非常重要了
    2023-04-04
  • Vue使用Vuex一步步封裝并使用store全過程

    Vue使用Vuex一步步封裝并使用store全過程

    這篇文章主要介紹了Vue使用Vuex一步步封裝并使用store全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue打包后訪問靜態(tài)資源路徑問題

    Vue打包后訪問靜態(tài)資源路徑問題

    在本篇文章里小編給各位整理的是關于Vue打包后訪問靜態(tài)資源路徑問題相關知識點,需要的朋友們學習下。
    2019-11-11
  • vue 2.0路由之路由嵌套示例詳解

    vue 2.0路由之路由嵌套示例詳解

    這篇文章主要給大家介紹了vue 2.0路由之路由嵌套的相關資料,文中給出了詳細的示例代碼供大家參考學習,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • vue-cli 3.x 修改dist路徑的方法

    vue-cli 3.x 修改dist路徑的方法

    今天小編就為大家分享一篇vue-cli 3.x 修改dist路徑的方法,具有很好的參考價值。希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue 項目集成 electron 和 electron 打包及環(huán)境配置方法

    vue 項目集成 electron 和 electron 打包及環(huán)境配

    文章介紹了如何使用Vue和Electron開發(fā)桌面端應用,包括安裝Electron、配置package.json、創(chuàng)建main.js文件、運行和打包應用等步驟,并分享了一些常見的打包錯誤及其解決方法,感興趣的朋友一起看看吧
    2025-01-01
  • 在vue中根據(jù)光標的顯示與消失實現(xiàn)下拉列表

    在vue中根據(jù)光標的顯示與消失實現(xiàn)下拉列表

    這篇文章主要介紹了在vue中根據(jù)光標的顯示與消失實現(xiàn)下拉列表,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09

最新評論

南澳县| 洛浦县| 惠州市| 江川县| 黎城县| 新乐市| 漳平市| 雷波县| 南康市| 车险| 衡水市| 克什克腾旗| 阳原县| 都江堰市| 定边县| 白朗县| 漳浦县| 临清市| 明溪县| 阳东县| 龙海市| 泸溪县| 泽州县| 肥西县| 长泰县| 临澧县| 岫岩| 临夏县| 海原县| 鸡东县| 龙陵县| 昭觉县| 资阳市| 丘北县| 宝鸡市| 恩施市| 三门峡市| 屏南县| 嘉峪关市| 兴业县| 平果县|