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

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

目录

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

该方法返回一个函数。

参数说明:

参数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内部方法的资料请关注易知道(ezd.cc)其它相关文章!

推荐阅读