JavaScript 精粹:原型扩展、闭包与高阶函数实现

作者:代码拾荒

时间:2026-10-25

浏览:230

本文整理自《JavaScript 精粹》,通过代码片段演示了如何为内置对象扩展方法,利用闭包解决循环中的变量捕获问题,以及实现函数柯里化和记忆化递归。内容涵盖原型链操作、作用域隔离及性能优化技巧,适合深入理解 JavaScript 核心机制的开发者参考。

文章目录

JavaScript 原型扩展方法

// 为构造函数原型添加方法


Function.method = function(name, func) {


this.prototype.name = func;


}

Number.method("integer", function() {


return Math[this < 0 ? 'ceil' : 'floor'](this);


});

(-10/3).integer(); // -3



String.method("trim", function() {


return this.replace(/^\s+|\s+$/g, '');


})

" neat ".trim(); // neat


利用闭包管理状态与事件

// 闭包


var quo = function(status) {


return {


get_status: function() {


return status;


    }
  }
}

var myQuo = new quo("amazed");


myQuo.get_status(); // amazed



// 闭包经典例子片段


for (var i = 0; i < lis.length; i++) {


lis.onclick = function(i) {


return function() {


alert(i);


    };

}(i);


}

函数柯里化与记忆化递归

// 套用


Function.method("curry", function() {


var slice = Array.prototype.slice,


args = slice.apply(arguments),


that = this;


return function() {


return that.apply(null, args.contact(arguments));


  }
})

// 记忆 递归


var memoization = function(memo, usefn) { // 抽象化


var fn = function(n) {


var result = memo[n];


if (typeof result !== 'number') {


result = usefn(fn, n);


memo[n] = result;


}

return result;


};

return fn;


};

var factorial = memoization([0, 1], function(fn, n) { // 递归的形式


return fn(n - 1) * n


});

factorial(5) // 120

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章