手写 Lodash (2)

本文是手写 Lodash 系列的第二部分,主要目标是实现链式调用功能。通过核心代码展示,作者解释了如何保存链式方法并在调用 `value` 方法时执行它们,同时保持非链式调用的可用性。
摘要由CSDN通过智能技术生成

手写 Lodash (2)

这里参考的是 lodash.js 4.17.21

1. 先看这次要达到的效果

var result1 = _({
   a: 1, b: 2}).keys().value();
var result2 = _([1,2,3,4,5])
	.map((i) => {
   return i + 1}).value();
var result3 = _([1,2,3,4,5]).take(2).value();
console.log('result1: ', result1); //['a', 'b']
console.log('result2: ', result2); //[2, 3, 4, 5, 6]
console.log('result3: ', result3); //[1, 2]

这次我要达到的效果:链式调用

2. 开始手写

为了能更好的表达重点,代码只写核心逻辑。
像一些错误提示,判断类型之类的这里会省略。

2.1 这是第一期的代码

function keys(value) {
   
    return Object.keys(value);
}
function map(value, fn) {
   
    var ks = keys(value);
    var values = ks.map(k => value[k]);
    return values.map(fn);
}
function take(array, takecount) {
   
    if (takecount === undefined) {
   
        return array.slice(0, 1);
    }
    else if (takecount === 0) {
   
        return [];
    }
    else if (takecount >= array.length) {
   
        return array;
    }
    else if (takecount < array.length){
   
        return array.slice(0, takecount)
    }
}
var _ = {
   };
_.keys = keys;
_.map = map;
_.take = take;

2.2 接着写

这一次我们要实现链式调用

思路:

每次调用链式方法,我们其实都没有立刻去执行它,而是把方法存起来,然后返回了一个对象,这个对象能获取到我们所有的链式方法。
直到我们调用 value 方法, 才会真的去执行那些我们存起来的方法,最后返回结果。

记住我们实现链式调用时,也要保持非链式调用时能用

代码:
function 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值