组件中 data 为什么是一个函数?

如果两个实例引用同一个对象,当其中一个实例的属性发生改变时,另一个实例属性也随之改变,对象没有自己的作用域,只有当两个实例拥有自己的作用域时,才不会相互干扰。

这是因为JavaScript的特性所导致,在component中,data必须以函数的形式存在,不可以是对象

组件中的data写成一个函数,数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一份新的data,相当于每个组件实例都有自己私有的数据空间,它们只负责各自维护的数据,不会造成混乱。

而单纯的写成对象形式,就是所有的组件实例共用了一个data,这样改一个全都改了。

例子:

  function Box(){

          }
          Box.prototype.data={
              msg:"aaa"
          };
          var b1=new Box();
          var b2=new Box();
          b1.data.msg="bbb";//--------------这里修改一个实例的属性,会造成另一个实例的属性也跟着修改了
          console.log(b1.data.msg);//------bbb
          console.log(b2.data.msg);//------bbb
 function Box(){
              this.data=this.data();
          }
          Box.prototype.data=function(){
              return{
                  msg:"aaa"
              }
          };
          var b1=new Box();
          var b2=new Box();
          b1.data.msg="bbb";//-----------------如果是函数的形式去定义的属性,这样它们有自己的作用域,在修改的时候不会影响到别人
          console.log(b1.data.msg);//----bbb
          console.log(b2.data.msg);//----aaa

原文地址:https://www.cnblogs.com/Rivend/p/12628536.html

时间: 2024-10-10 21:43:50

组件中 data 为什么是一个函数?的相关文章

Vue.js 组件中data的使用

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

如何调用com组件中包含IntPtr类型参数的函数

背景 公司的支付平台最近对接了西安移动的支付接口,接口中签名的方法是对方提供了一个com组件,组件中包含了一个签名的方法和一个验签的方法,注册了签名之后,在vs中进行了引用,引用之后,查看组件的定义如下: using System; using System.Runtime.InteropServices; namespace UMPAYLib { [ClassInterface(0)] [Guid("E92EB0AA-00CC-4F93-A76D-632BEA94E980")] [T

多线程中的信号机制--signwait()函数【转】

本文转载自:http://blog.csdn.net/yusiguyuan/article/details/14237277 在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同.在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号.它完全是异步的(我们完全不知到信号会在进程的那个执行点到来!).然而信号处理函数的实现,有着许多的限制:比如有一些函数不能在信号处理函数中调用:再比如一些函数read.recv等调用时会被异

vue02----什么是组件、组件创建、全局组件、局部组件、组件嵌套、组件传值、为什么组件中的data不是一个对象而是一个函数

### 什么是组件? 将代码进行复用 组件是实例的拓展子类 组件继承自实例,实例有的组件大部分都有,稍有变异 ### 组件创建 创建组件模板的2种方式: 1.通过template标签     template:"#tpl" 2.通过字符串模板   template:"<h1>吴启浪</h1>" ### 全局组件 所有的实例都可以使用 Vue.component("wql",{ template:"<h1&g

深入理解--VUE组件中数据的存放以及为什么组件中的data必需是函数

1.组件中数据的存放 ***(重点)组件是一个单独模块的封装:这个模块有自己的HTML模板,也有data属性. 只是这个data属性必需是一个函数,而这个函数返回一个对象,这个对象里面存放着组件的数据. <template id="MyCpn"> <div> <h2>组件数据的存放 </h2> <p>{{title}}</p> </div> </template> <script>

也谈matlab中读取视频的一个重要函数mmreader

也谈matlab中读取视频的一个重要函数mmreader 在matlab中输入help mmreader来查阅一下该函数,有如下信息: MMREADER Create a multimedia reader object.     OBJ = MMREADER(FILENAME) constructs a multimedia reader object, OBJ, that    can read in video data from a multimedia file.  FILENAME

在COM组件中调用JS函数

要求是很简单的,即有COM组件A在IE中运行,使用JavaScript(JS)调用A的方法longCalc(),该方法是一个耗时的操作,要求通知IE当前的进度.这就要求使用回调函数,设其名称为scriptCallbackFunc.实现这个技术很简单: 1 .组件方(C++) 组件A 的方法在IDL中定义: [id(2)] HRESULT longCalc([in] DOUBLE v1, [in] DOUBLE v2, [in, optional] VARIANT scriptCallback);

如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏?

引言 在我的博客中,我曾经翻译了几篇关于ECS的文章.这些文章都是来自于Game Development网站.如果你对这个架构方式还不是很了解的话,欢迎阅读理解 组件-实体-系统和实现 组件-实体-系统. 我发现这个架构方式,是在浏览GameDev上的文章的时候了解到的.很久以前,就知道了有这么个架构方法,只是一直没有机会自己实践下.这一次,我就抽空,根据网上对ECS系统的讨论,采用了一种实现方法,来实现一个. 我很喜欢做游戏,所以同样的,还是用游戏实例来实践这个架构方法.我将会采用cocos2

Vue系列之 =&gt; 组件中的data和methods

使用data 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <meta http-equiv="X-UA