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?