原型,数组扩展和对象属性

时间:2016-01-18 12:16:38

标签: javascript functional-programming

我正在使用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'对象,所以我无法访问我的原型函数中的项目。

如何在地图功能中处理访问数组中的每个项目?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您遇到的这个问题很可能是由使用箭头函数语法=>引起的。

箭头函数不会创建函数范围,因此会从周围范围继承。在这种情况下,它是全局/模块范围。由于您使用的是'use strict',因此全局this应为undefined

尝试使用map关键字更改function

Array.prototype.map = function(cb) {
      console.log(this); // should now be scoped
      console.log(this.length);
    };