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

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

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

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

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

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

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

我們想要解決這個(gè)問(wèn)題就不得不說(shuō)原型鏈和this。

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

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

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)

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

function Person(){
    this.datas = this.sayHello()//this指向調(diào)用它的對(duì)象
  }
  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í)候沒(méi)有造成數(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直接定義成一個(gè)對(duì)象則會(huì)報(bào)錯(cuò)

3.定義一個(gè)外部對(duì)象的形式,結(jié)果點(diǎn)擊一個(gè)按鈕,兩個(gè)數(shù)據(jù)同時(shí)增加,造成數(shù)據(jù)污染

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

相關(guān)文章

  • Vue3中watch的最佳用法

    Vue3中watch的最佳用法

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

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

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

    vue3中使用swiper及遇到的問(wèn)題解析

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

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

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

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

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

    vue-列表下詳情的展開(kāi)與折疊案例

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

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

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

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

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

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

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

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

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

最新評(píng)論