lodash内部getFuncName和setToString方法原理剖析是怎样的?

2026-06-04 13:485阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计614个文字,预计阅读时间需要3分钟。

lodash内部getFuncName和setToString方法原理剖析是怎样的?

目录 + getFuncName + realNames + setToString + baseSetToString + constant + defineProperty + identity + shortOut + 小结+ getFuncName + getFuncName方法主要功能是获取参数func的name属性。+ 实现上主要通过函数的name属性去获取,同时也兼容的输出。

目录
  • getFuncName
    • realNames
  • setToString
    • baseSetToString
      • constant
      • defineProperty
      • identity
    • shortOut
    • 小结

      getFuncName

      getFuncName方法主要是获取参数func的name属性。

      实现上主要通过函数的name属性去获取,同时也兼容原型链上属性判断。

      源码如下:

      import realNames from './_realNames.js'; var objectProto = Object.prototype; var hasOwnProperty = objectProto.hasOwnProperty; function getFuncName(func) { var result = (func.name + ''), array = realNames[result], length = hasOwnProperty.call(realNames, result) ? array.length : 0; while (length--) { var data = array[length], otherFunc = data.func; if (otherFunc == null || otherFunc == func) { return data.name; } } return result; }

      lodash内部getFuncName和setToString方法原理剖析是怎样的?

      realNames

      realNames方法源码实现是赋值一个空对象,方便后续引用和保存。

      源码如下:

      var realNames = {};

      setToString

      setToString方法主要是将参数“func”的“toString”方法设置为返回“string”。

      该方法返回一个函数。

      参数说明:

      • 参数1:func要修改的函数。
      • 参数2:字符串“toString”结果。

      setToString方法在实现上借助了baseSetToString内部方法和shortOut内部方法。

      源码如下:

      import baseSetToString from './_baseSetToString.js'; import shortOut from './_shortOut.js'; var setToString = shortOut(baseSetToString);

      baseSetToString

      import constant from './constant.js'; import defineProperty from './_defineProperty.js'; import identity from './identity.js'; var baseSetToString = !defineProperty ? identity : function(func, string) { return defineProperty(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); };

      constant

      constant方法是lodash对外导出的方法,该方法可以创建一个返回参数value的函数,返回的是新的常量函数。

      使用如下:

      var objects = _.times(2, _.constant({ 'a': 1 })); console.log(objects); // => [{ 'a': 1 }, { 'a': 1 }] console.log(objects[0] === objects[1]); // => true

      源码如下:

      function constant(value) { return function() { return value; }; }

      defineProperty

      defineProperty方法通过getNative获取原生的Object.defineProperty方法。

      源码如下:

      import getNative from './_getNative.js'; var defineProperty = (function() { try { var func = getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }());

      identity

      identity方法在之前的方法的篇章中介绍过,主要是返回参数本身,方便在迭代中的函数调用,是一种传参形式。

      源码如下:

      function identity(value) { return value; }

      shortOut

      在《 lodash里内部方法getData和setData的实现 》中我们了解到shortOut方法的实现。

      小结

      本篇章我们简单了解了lodash里的两个内部方法getFuncName和setToString的实现,同时我们也在了解实现的过程中认识到了constant、defineProperty等内部方法的实现,更多关于lodash内部方法的资料请关注易盾网络其它相关文章!

      本文共计614个文字,预计阅读时间需要3分钟。

      lodash内部getFuncName和setToString方法原理剖析是怎样的?

      目录 + getFuncName + realNames + setToString + baseSetToString + constant + defineProperty + identity + shortOut + 小结+ getFuncName + getFuncName方法主要功能是获取参数func的name属性。+ 实现上主要通过函数的name属性去获取,同时也兼容的输出。

      目录
      • getFuncName
        • realNames
      • setToString
        • baseSetToString
          • constant
          • defineProperty
          • identity
        • shortOut
        • 小结

          getFuncName

          getFuncName方法主要是获取参数func的name属性。

          实现上主要通过函数的name属性去获取,同时也兼容原型链上属性判断。

          源码如下:

          import realNames from './_realNames.js'; var objectProto = Object.prototype; var hasOwnProperty = objectProto.hasOwnProperty; function getFuncName(func) { var result = (func.name + ''), array = realNames[result], length = hasOwnProperty.call(realNames, result) ? array.length : 0; while (length--) { var data = array[length], otherFunc = data.func; if (otherFunc == null || otherFunc == func) { return data.name; } } return result; }

          lodash内部getFuncName和setToString方法原理剖析是怎样的?

          realNames

          realNames方法源码实现是赋值一个空对象,方便后续引用和保存。

          源码如下:

          var realNames = {};

          setToString

          setToString方法主要是将参数“func”的“toString”方法设置为返回“string”。

          该方法返回一个函数。

          参数说明:

          • 参数1:func要修改的函数。
          • 参数2:字符串“toString”结果。

          setToString方法在实现上借助了baseSetToString内部方法和shortOut内部方法。

          源码如下:

          import baseSetToString from './_baseSetToString.js'; import shortOut from './_shortOut.js'; var setToString = shortOut(baseSetToString);

          baseSetToString

          import constant from './constant.js'; import defineProperty from './_defineProperty.js'; import identity from './identity.js'; var baseSetToString = !defineProperty ? identity : function(func, string) { return defineProperty(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); };

          constant

          constant方法是lodash对外导出的方法,该方法可以创建一个返回参数value的函数,返回的是新的常量函数。

          使用如下:

          var objects = _.times(2, _.constant({ 'a': 1 })); console.log(objects); // => [{ 'a': 1 }, { 'a': 1 }] console.log(objects[0] === objects[1]); // => true

          源码如下:

          function constant(value) { return function() { return value; }; }

          defineProperty

          defineProperty方法通过getNative获取原生的Object.defineProperty方法。

          源码如下:

          import getNative from './_getNative.js'; var defineProperty = (function() { try { var func = getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }());

          identity

          identity方法在之前的方法的篇章中介绍过,主要是返回参数本身,方便在迭代中的函数调用,是一种传参形式。

          源码如下:

          function identity(value) { return value; }

          shortOut

          在《 lodash里内部方法getData和setData的实现 》中我们了解到shortOut方法的实现。

          小结

          本篇章我们简单了解了lodash里的两个内部方法getFuncName和setToString的实现,同时我们也在了解实现的过程中认识到了constant、defineProperty等内部方法的实现,更多关于lodash内部方法的资料请关注易盾网络其它相关文章!