解析:vue.js中组件的data数据为什么是函数?

1.首先,我先以vue的方法下一个简单的组件。

html:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>组件中的数据为什么是函数</title>
	<script src="vue.js"></script>
</head>
<body>
	<div id="box">
		<example></example>
	</div>

<!-- - - - 组件模板 - - - - -->
	<template id="ex"><h1>{{msg}}</h1></template>
</body>
</html>
<script>
	var vm=new Vue({
		el: '#box',
		components:{
			//定义了一个名为example的组件
			//它的data数据是一个函数,函数中return出了一个对象,对象中包括了键/值-->msg:"hello"
			example:{
				template:'#ex',
				data:function(){
					return {
						msg:"hello"
					}
				}
			}	
		}
	})
</script>

以上使用vue.js写出的一个example组件。

2.在vue.js中注册一个组件,就相当于是在原生JavaScript中写一个构造函数(构造函数的作用就是用来造对象)。下面我将用JavaScript代码写一个构造函数。

<script type="text/javascript">
var Example=function(){

	};
	Example.prototype.data={  // 设置构造函数中的data 通过prototype向Example对象添加data属性
		a:1,
		b:2
	};
	var components1=new Example();  // 创建实例(components1)
	var components2=new Example();  // 创建实例(components2)
	console.log(components1.data.a)  //打印出1

	components1.data.a=10;  //给components1.data.a赋值为10
	console.log(components2.data.a)  //打印出10
</script>

在上面的这个例子中,对component1进行更改,component2也发生变化了,如果不想出现这种情况,  我们可以将data 保护在一个独立的作用域内(包在一个函数中)。

3.下面这组代码是我将data包在一个函数内。

<script type="text/javascript">
var Example=function(){
		this.data=this.data()  
	};
	Example.prototype.data=function(){  // 将data保护在了一个独立作用域内
		return {
			a:1,
			b:2
		}
	};
	var components1=new Example();
	var components2=new Example();
	
	components1.data.a=300;  //把300赋值给了components1.data.a
	console.log(components1.data.a)  //components1.data.a打印出了300
	console.log(components2.data.a)  // components2.data.a打印出了1
</script>

通过使用原生JavaScript构造函数的分析可以得出:

        在vue.js中,组件的数据使用函数,是为了将数据保护在一个独立的作用域中,不受到其他组件的污染。

转载于:https://my.oschina.net/u/3490747/blog/911934

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值