当前位置:   article > 正文

Lodash 核心 lodash_lodashwrapper 转换

lodashwrapper 转换

#baseCreate

Object.create(ptoto[, propertiesObject])

不能以名称而去定义该方法的作用,它并不只是为了创建一个对象,其可以理解为"创建一个继承了指定对象的对象",并且创建后的对象是不存在原型对象,即prototype,相比 Object.assign 从 create 名称上来说到不如是用指定对象生成了一个新的对象,所以 Object.create 一个指定对象的新的实例对象,只不过这个指定的对象通常是原型对象

ES5之前的版本不支持将参数 ptoto 设置为 null

function A(){
   }
A.prototype.name = 'AA'

let b = Object.create(A.prototype)
console.log(b.name) //=> AA
b.__proto__.name = 'BB'
console.log(A.prototype.name) //=> AA

let c = Object.assign({
   }, A.prototype)
console.log(c.name) //=> AA
c.__proto__.name = 'BB'
console.log(A.prototype.name) //=> BB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Lodash.#baseCreate() 私有方法也是实现了 Object.create 方法的作用,其源码如下:

var baseCreate = (function() {
   
  // 准备全新的构造器
  function object() {
   }
  return function(proto) {
   
    if (!isObject(proto)) {
   
      return {
   };
    }
    // 如果支持 Object.create 则直接使用
    if (objectCreate) {
   
      return objectCreate(proto);
    }
    // 准备对象实例化原型为指定原型
    object.prototype = proto;
    var result = new object;
    // 丢掉返回对象的类原型对象
    object.prototype = undefined;
    return result;
  };
}());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

LodashWrapper

以下是摘录 lodash 与 LodashWrapper 部分的拟源码:

function _Lodash(){
   }
_Lodash.prototype.name = 'AA'
function _LodashWrapper(){
   }
console.log( (new _LodashWrapper()).name ) //=> undefined

// 指定 _LodashWrapper 原型只是以 _Lodash.prototype 对象创建出来的新对象
// 也就是说这个新对象只是 _Lodash.prototype 的一个实例对象,并不就是 _Lodash.prototype 这个原型对象本身
// 而这个对象的 __proto__ 指向的是 _Lodash.prototype 
// 也就是 _LodashWrapper.prototype 实例对象继承的 _Lodash 原型对象
_LodashWrapper.prototype = Object.create(_Lodash.prototype)
_LodashWrapper.prototype.constructor = _LodashWrapper

console.log( (new _LodashWrapper()).name ) //=> AA
_Lodash.prototype.age = 20
console.log( (new _LodashWrapper()).age 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/695779
推荐阅读
相关标签
  

闽ICP备14008679号