欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

person1和person2是Person的引用,所以當(dāng)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指向調(diào)用它的對象。又有一個疑問了,明明指向的是同一個方法為什么會有不一樣的呢?難道克隆了一個?答案:定義在構(gòu)造函數(shù)內(nèi)部的方法,會在它的每一個實例上都克隆這個方法;定義在構(gòu)造函數(shù)的prototype屬性上的方法會讓它的所有示例都共享這個方法,但是不會在每個實例的內(nèi)部重新定義這個方法引用:http://www.dbjr.com.cn/article/199830.htm

function Person(){
    this.datas = this.sayHello()//this指向調(diào)用它的對象
  }
  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) 當(dāng)使用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.定義一個外部對象的形式,結(jié)果點擊一個按鈕,兩個數(shù)據(jù)同時增加,造成數(shù)據(jù)污染

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

相關(guān)文章

  • Vue3中watch的最佳用法

    Vue3中watch的最佳用法

    這篇文章主要給大家介紹了關(guān)于Vue3中watch用法的相關(guān)資料,文章中有詳細的代碼示例,需要的朋友可以參考下
    2023-04-04
  • vue雙向綁定及觀察者模式詳解

    vue雙向綁定及觀察者模式詳解

    這篇文章主要介紹了vue雙向綁定及觀察者模式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue3中使用swiper及遇到的問題解析

    vue3中使用swiper及遇到的問題解析

    這篇文章主要介紹了vue3中使用swiper及遇到的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue3+echarts+折線投影(陰影)效果的實現(xiàn)

    vue3+echarts+折線投影(陰影)效果的實現(xiàn)

    這篇文章主要介紹了vue3+echarts+折線投影(陰影)效果的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue3使用Swiper實現(xiàn)輪播圖示例詳解

    Vue3使用Swiper實現(xiàn)輪播圖示例詳解

    這篇文章主要為大家介紹了Vue3使用Swiper實現(xiàn)輪播圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • vue-列表下詳情的展開與折疊案例

    vue-列表下詳情的展開與折疊案例

    這篇文章主要介紹了vue-列表下詳情的展開與折疊案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 詳解Vue+ElementUI從零開始搭建自己的網(wǎng)站(一、環(huán)境搭建)

    詳解Vue+ElementUI從零開始搭建自己的網(wǎng)站(一、環(huán)境搭建)

    這篇文章主要介紹了Vue+ElementUI從零開始搭建自己的網(wǎng)站(一、環(huán)境搭建),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • unix時間戳轉(zhuǎn)換的方法詳解

    unix時間戳轉(zhuǎn)換的方法詳解

    將 unix 時間戳轉(zhuǎn)換為日期時間和使用日期時間轉(zhuǎn)換為 unix 時間戳,在項目中常常用到,其中vue中的moment庫很是方便,下面小編就來為大家講講具體使用吧
    2023-09-09
  • 表格Table實現(xiàn)前端全選所有功能方案示例(包含非當(dāng)前頁)

    表格Table實現(xiàn)前端全選所有功能方案示例(包含非當(dāng)前頁)

    這篇文章主要為大家介紹了表格Table實現(xiàn)前端全選所有功能,包括非當(dāng)前頁的方案示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-02-02
  • Vite多環(huán)境配置項目高定制化能力詳解

    Vite多環(huán)境配置項目高定制化能力詳解

    這篇文章主要為大家介紹了Vite多環(huán)境配置項目高定制化能力詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07

最新評論