function normalizeMap (map) {
// 判断是否数组,并且最终返回也是一个数组
console.log(1)
console.log(Object.keys(map))
return Array.isArray(map)
// 是数组就直接 map 循环
? map.map(key => ({ key, val: key }))
// 是对象就将 key拿出来,然后再进行 map 循环
: Object.keys(map).map(key => ({ key, val: map[key] }))
}
var mapState = function (states) {
var res = {}; // 这是一个对象类型
// 将 state 通过normalizeMap格式化变成一个数组,数组元素是一个对象
// console.log(states);
// console.log(normalizeMap(states));
normalizeMap(states).forEach(function (ref) {
var key = ref.key;// 将数组元素对象解出来,先保存起来被后面使用
var val = ref.val;
// 组成一个新数组,以 key 为 key,值是一个函数mappedState
res[key] = function mappedState () {
var state = this.$store.state; // 将本身 vuex 的 store 的 state 和 getters 保存
var getters = this.$store.getters;
// 先不看 namespace 部分
//if (namespace) {
// var module = getModuleByNamespace(this.$store, 'mapState', namespace);
// if (!module) {
// return
// }
// state = module.context.state;
// getters = module.context.getters;
//}
// 这个函数里面会判断真正的值 ref.val 是函数还是普通值
return typeof val === 'function'
? val.call(this, state, getters) // 函数会被直接执行,并且传入 vuex 的state 和 getters
: state[val] // 值会直接放到 vuex 的state 里面
};
// mark vuex getter for devtools
res[key].vuex = true;
});
return res
};
var testFun = function(){
console.log(1);
}
mapState(testFun)
console.log("end")
console