vue

为什么data属性必须声明为返回一个初始数据对应的函数呢?

发布于 2021-01-11 17:00:36
关注者
0
被浏览
443
6 个回答
  • 面试哥
    面试哥 2021-01-12
    为面试而生,有面试问题,就找面试哥。

    对象为引用类型,当重用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时,其他重用的组件中的data会同时被修改;而使用返回对象的函数,由于每次返回的都是一个新对象(Object的实例),引用地址不同,则不会出现这个问题。

  • 面试哥
    面试哥 2021-01-12
    为面试而生,有面试问题,就找面试哥。

    防止组件复用数据,data必须为一个函数,因为实例可以维护一份被返回对象的独立的拷贝

    
    data(){
      return {
         content: 0
       }
    }
    
  • 面试哥
    面试哥 2021-01-12
    为面试而生,有面试问题,就找面试哥。

    对象为引用类型,当重用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时,其他重用的组件中的data会同时被修改;而使用返回对象的函数,由于每次返回的都是一个新对象(Object的实例),引用地址不同,则不会出现这个问题。

    说的好

  • 面试哥
    面试哥 2021-01-12
    为面试而生,有面试问题,就找面试哥。

    对象为引用类型,当重用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时,其他重用的组件中的data会同时被修改;而使用返回对象的函数,由于每次返回的都是一个新对象(Object的实例),引用地址不同,则不会出现这个问题。

    学习了

  • 面试哥
    面试哥 2021-01-12
    为面试而生,有面试问题,就找面试哥。

    往简单了说,是为了阻止相同vue组件之间共享data。往复杂了说,js引擎在编译代码的时候,会尝试为所有import引入的模块分配地址,相同的模块只会分配一次地址,执行时按照引用取值,同样的引用拿到的对象是一样的,其内部的data属性也是一样的。dat改成函数以后,每次 return 都会重新分配内存创建新对象,就不存在同样的引用这个问题。

  • 面试哥
    面试哥 2021-01-12
    为面试而生,有面试问题,就找面试哥。

    公司的面试题中也有这么一题
    如果是公共组件确实必须要返回一个函数,
    但是如果不是可以直接一个对象

    因为没有执行函数return之后返回的都是一个全新的对象(类似于工厂模式的设计思想),
    虽然我们一样, 但是我们又没有关系. 避免数据混淆

知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看