baseAssignValue

“Yesterday, you said tomorrow.” -Nike

本文为 《lodash 源码阅读》 系列文章,后续内容会在 github 中发布,欢迎 star,gitbook 同步更新。

源码

/**
 * `assignValue` 和 `assignMergeValue` 无值检查的基本实现。
 *
 * @private
 * @param {Object} object 需要修改的对象。
 * @param {string} key 指定的 key
 * @param {*} value 需要分配的 value
 */
function baseAssignValue(object, key, value) {
  if (key == '__proto__') {
    Object.defineProperty(object, key, {
      configurable: true,
      enumerable: true,
      value: value,
      writable: true
    });
  } else {
    object[key] = value;
  }
}

知识点

baseAssignValue 是在一个对象上定义一个新属性,功能类似于 Object.defineProperty()(笔者认为可以直接用该方法替代),方法内部对 key 做了是否等于 __proto__ 的判断,这样做是因为对于一个对象来说,__proto__ 属于 Object.prototype,直接赋值 object.__proto__ 修改的是其原型链上的属性 __proto__,而非自身的属性,需要给 object 添加自身属性 __proto__,需要使用到 Object.defineProperty()

相关链接

Last updated

Was this helpful?