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内部方法的资料请关注编程网其它相关文章!