lodash内部方法getFuncName及setToString剖析详解

 更新时间:2022年09月01日 08:46:31   作者:EricHong  
本篇章我们主要是通过了解lodash里的两个内部方法getFuncName方法和setToString方法,在实际开发中我们也可以借鉴方法的实现思路,在需要的时候简单封装一下,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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”。

该方法返回一个函数。

参数说明:

  • 参数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内部方法的资料请关注脚本之家其它相关文章!

相关文章

  • 微信小程序图片宽100%显示并且不变形

    微信小程序图片宽100%显示并且不变形

    这篇文章主要介绍了微信小程序图片宽100%显示并且不变形的相关资料,需要的朋友可以参考下
    2017-06-06
  • JavaScript CSS优雅实现网页多主题风格换肤功能详解

    JavaScript CSS优雅实现网页多主题风格换肤功能详解

    这篇文章主要为大家介绍了JavaScript CSS优雅的实现网页多主题风格换肤功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • JavaScript中Map与Object应用场景

    JavaScript中Map与Object应用场景

    这篇文章主要为大家介绍了JavaScript中Map与Object应用场景的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 微信小程序 出现47001 data format error原因解决办法

    微信小程序 出现47001 data format error原因解决办法

    这篇文章主要介绍了微信小程序 出现47001 data format error原因解决办法的相关资料,需要的朋友可以参考下
    2017-03-03
  • JS前端常见的竞态问题解决方法详解

    JS前端常见的竞态问题解决方法详解

    这篇文章主要为大家介绍了JS前端常见的竞态问题解决方法详解,阅读完本文,你将会知道:什么是竞态问题;通常出现在哪些场景;解决竞态问题有哪些方法,希望能够有所帮助,祝大家多多进步,早日升职加薪的相关资料
    2022-08-08
  • 微信小程序 图片宽度自适应的实现

    微信小程序 图片宽度自适应的实现

    这篇文章主要介绍了微信小程序 图片宽度自适应的实现的相关资料,需要的朋友可以参考下
    2017-04-04
  • JavaScript内置对象介绍

    JavaScript内置对象介绍

    这篇文章主要介绍了JavaScript内置对象,内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能,下面我们一起进入文章了解更多详细内容
    2021-12-12
  • 实现基于飞书webhook监听github代码提交

    实现基于飞书webhook监听github代码提交

    这篇文章主要为大家介绍了实现基于飞书webhook监听github代码提交示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • JS前端性能优化解决内存泄漏页面崩溃

    JS前端性能优化解决内存泄漏页面崩溃

    这篇文章主要为大家介绍了JS前端性能优化解决内存泄漏页面崩溃示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 浅谈克隆 JavaScript

    浅谈克隆 JavaScript

    这篇文章主要介绍了克隆 JavaScript,克隆又有浅克隆与深克隆,文章围绕JavaScript浅克隆与深克隆的相关资料展开具体内容,需要的朋友可以参考一下
    2021-10-10

最新评论