/**
 * 给对象注入属性
 * @param keys 属性key数组， 如 keys = ['config', 'path'] , 则会给对象注入 object.config.path 的属性
 * @param value 属性值
 * @returns {Object}
 */
Object.defineProperty(Object.prototype, 'assignProps', { // 给对象注入属性
  writable: false, // 不可写
  enumerable: false, // 不可枚举
  configurable: true, // 可配置
  value: function (keys, value) { // 值
    let props = this // 属性
    for (let i = 0; i < keys.length; i++) { // 遍历属性key数组
      let key = keys[i] // 属性key
      if (i == keys.length - 1) { // 如果是最后一个属性key
        props[key] = value // 给属性注入属性值
      } else { 
        // 如果不是最后一个属性key
        props[key] = props[key] == undefined ? {} : props[key] // 如果属性不存在，则给属性注入一个空对象
        props = props[key] // 给属性赋值
      }
    }
    return this // 返回对象
  }
})
