我正在使用Haskell学习函数编程,现在我想用它与Javascript一起使用。
我已经读过,使用javascripts复制一些基本功能是很好的训练,比如地图或过滤器,所以我决定再次制作它们。
其实我有这个代码:
'use strict';
Array.prototype.map = (cb) => {
console.log(this); // get empty object
console.log(this.length); // get undefined
};
let array = [1, 4, 9];
array.map(Math.sqrt);
正如你在那里看到的,我的问题是我无法访问我的map函数中的'this'对象,所以我无法访问我的原型函数中的项目。
如何在地图功能中处理访问数组中的每个项目?
感谢您的帮助。
答案 0 :(得分:3)
您遇到的这个问题很可能是由使用箭头函数语法=>
引起的。
箭头函数不会创建函数范围,因此会从周围范围继承。在这种情况下,它是全局/模块范围。由于您使用的是'use strict'
,因此全局this
应为undefined
。
尝试使用map
关键字更改function
:
Array.prototype.map = function(cb) {
console.log(this); // should now be scoped
console.log(this.length);
};