源码5——const/new/instanceof/函数柯里化
2021/9/24 14:42:16
本文主要是介绍源码5——const/new/instanceof/函数柯里化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. js实现const
function myConst (key, value) { const desc = { value: value, writable: false } Object.defineProperty(window, key, desc); } myConst('obj', {a: 1})
2. js实现new
function myNew (fn, params) { // 构造函数,构造函数参数 const args = Array.prototype.slice.call(arguments); const fn = args.shift(); const obj = Object.create(fn.prototype); // this对象 const res = fn.apply(obj, args); // 如果return的是一个对象,new命令直接返回该对象,否则返回this对象 return (typeof res === 'object' && typeof res !=='null') ? res : obj; } var p = myNew(Person, '张三', 28)
3. js实现instanceof
// 模拟 left instanceof right, function isInstanceof(left, right){ // object和null排除,因为后面追溯原型要用到 const baseType = ['number', 'string', 'boolean', 'undefined', 'symbol']; if(baseType.includes(typeof(left))) return false; // 将right.prototype依次和left原型链上的每个对象做比较 left = left.__proto__; while(true){ if(left === null) return false; if(left === right.prototype) return true; left = left.__proto__; } }
4. 实现柯里化
将一个多参函数转换成一系列的单参函数,而部分应用则是将一个多参函数切一刀,柯里化是切好多刀,直到中间每个函数都是单参的,最后得到柯里化函数。
(1)与普通函数的对比示例:
const add = function(x, y, z) { return x + y + z; } const curAdd = currying(add); //传入多参函数 const res = curAdd(1)(2)(3); // 调用柯里化函数 console.log(res); // 6
(2)js实现
function toCurry(fn, ...args) { return function () { // 合并上一次缓存的参数和本次传入的参数 args = [...args, ...arguments]; // 判断参数数量是否等于原函数的参数个数 // fn.length表示函数定义时的参数个数 if (args.length < fn.length) { // 不够的话,继续递归 return toCurry(fn, ...args); } else { // 数量足够,执行函数并返回结果 return fn.apply(null, args); } } }
这篇关于源码5——const/new/instanceof/函数柯里化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12深入理解 ECMAScript 2024 新特性:Map.groupBy() 分组操作
- 2025-01-11国产医疗级心电ECG采集处理模块
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势