手写 Lodash (3)
这里参考的是 lodash.js 4.17.21
1. 先看这次要达到的效果
var result1 = _([1,2,3,4,5])
.map((i) => {
console.log(i); return i + 1})
.take(2)
.value();
console.log('result1: ', result1);
//1
//2
//[2, 3]
发现没有 map 里的方法只被执行了两次,
这就是我们要达到的效果:惰性求值!!!
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)
}
}
function LodashWrapper(value) {
this.__wrapper__ = value;
this.actions = [];
}
var _ = lodash = function (value) {
return new LodashWrapper(value);;
};
_.keys = keys;
_.map = map;
_.take = take;
function mixin(obj, source) {
var props = Object.keys(source);
var methodNames = props.filter((p) => {
return typeof source[p] === 'function';});
methodNames.forEach((n) => {
var func = source[n];
obj.prototype[n] = function () {
var args = Array.</