如何剖析详解lodash的getFuncName和setToString方法?

2026-04-01 14:121阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

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

如何剖析详解lodash的getFuncName和setToString方法?

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

getFuncName方法主要功能是获取函数的name属性。该方法主要通过函数的name属性去获取函数名称。

实现上,主要利用JavaScript的函数特性,通过函数的name属性来获取函数的名称。同时,也兼容了某些情况下函数name属性可能被修改的情况。

具体实现如下:

javascriptfunction getFuncName(func) { return func.name;}

总结:- getFuncName方法主要获取函数的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; }

      realNames

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

      源码如下:

      var realNames = {};

      setToString

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

      该方法返回一个函数。

      参数说明:

      如何剖析详解lodash的getFuncName和setToString方法?

      • 参数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内部方法的资料请关注易盾网络其它相关文章!

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

      如何剖析详解lodash的getFuncName和setToString方法?

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

      getFuncName方法主要功能是获取函数的name属性。该方法主要通过函数的name属性去获取函数名称。

      实现上,主要利用JavaScript的函数特性,通过函数的name属性来获取函数的名称。同时,也兼容了某些情况下函数name属性可能被修改的情况。

      具体实现如下:

      javascriptfunction getFuncName(func) { return func.name;}

      总结:- getFuncName方法主要获取函数的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; }

          realNames

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

          源码如下:

          var realNames = {};

          setToString

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

          该方法返回一个函数。

          参数说明:

          如何剖析详解lodash的getFuncName和setToString方法?

          • 参数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内部方法的资料请关注易盾网络其它相关文章!