(vm)
| 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) { |
no test coverage detected