vue2源码中 使用连续点符号获取属性,a.b.c

124 阅读1分钟

在vue2 源码中获取属性a.b.c 的值

let data= {
  a: {
     b: {
        c: 100
     }
  }
  }
/**
 * Parse simple path.
 */
const bailRE = new RegExp(`[^${unicodeRegExp.source}.$_\\d]`)
export function parsePath (path: string): any {
  if (bailRE.test(path)) {
    return
  }
  const segments = path.split('.')
  return function (obj) {
    for (let i = 0; i < segments.length; i++) {
      if (!obj) return
      obj = obj[segments[i]]
    }
    return obj
  }
}


源码中使用正则。自己手写实现一个

function lookup(dataObj, keyName) {
  // 看看keyName 中有没有点符号
  if (keyName.indexOf(".") > -1 && keyName !== ".") {
    var keys = keyName.split("."); //[ 'a', 'b', 'c' ]
    console.log(keys);
    
    var temp = dataObj;
    for (let i = 0; i < keys.length; i++) {
   
      temp = temp[keys[i]];
      console.log("temp==", temp);
    }
    return temp;
  }
  // 如果没有点符号
  return dataObj[keyName];
}
console.log(lookup(data, "a.b.c"));