MCPcopy Index your code
hub / github.com/ygs-code/vue / initData

Function initData

vue.js:4963–5017  ·  view source on GitHub ↗
(vm)

Source from the content-addressed store, hash-verified

4961
4962 //初始化数据 获取options.data 的数据 将他们添加到 监听者中
4963 function initData(vm) {
4964 //获取到$options.data 数据
4965 var data = vm.$options.data;
4966
4967 //获取data中的数据 判断如果是函数则
4968 data = vm._data = typeof data === 'function' //如果data是函数
4969 ? getData(data, vm) //转换数据 如果数据是 一个函数的时候 执行该函数 拿到数据
4970 : data || {}; //直接获取数据
4971
4972 if (!isPlainObject(data)) { //如果不是对象 则发出警告日志
4973 data = {};
4974 "development" !== 'production' && warn(
4975 'data functions should return an object:\n' +
4976 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
4977 vm
4978 );
4979 }
4980 // proxy data on instance
4981 var keys = Object.keys(data); //获取数据的key
4982 var props = vm.$options.props; //获取props 属性
4983 var methods = vm.$options.methods; //获取事件
4984 var i = keys.length; //获取数据key的长度
4985 while (i--) { //循环data
4986 var key = keys[i];
4987 {
4988 if (methods && hasOwn(methods, key)) { //如果数据中的 key 与事件 中的定义的key 一样 则发出警告
4989 warn(
4990 ("Method \"" + key + "\" has already been defined as a data property."),
4991 vm
4992 );
4993 }
4994 }
4995
4996 if (props && hasOwn(props, key)) { //如果数据中的 key 与props属性 中的定义的key 一样 则发出警告
4997 "development" !== 'production' && warn(
4998 "The data property \"" + key + "\" is already declared as a prop. " +
4999 "Use prop default value instead.",
5000 vm
5001 );
5002 } else if (!isReserved(key)) { //如果不是 以$或者_开头
5003 console.log(vm)
5004 console.log(key)
5005
5006 proxy(vm, "_data", key); //把数据添加到监听者中
5007 console.log(vm)
5008
5009
5010 }
5011 }
5012 // observe data
5013 console.log('data')
5014 console.log(data)
5015
5016 observe(data, true /* asRootData */);
5017 }
5018
5019 //转换数据 如果数据是 一个函数的时候 执行该函数 拿到数据
5020 function getData(data, vm) {

Callers 1

initStateFunction · 0.85

Calls 6

getDataFunction · 0.85
isPlainObjectFunction · 0.85
hasOwnFunction · 0.85
isReservedFunction · 0.85
proxyFunction · 0.85
observeFunction · 0.85

Tested by

no test coverage detected