javascript - 原型(prototype)、数组扩展和对象属性

标签 javascript functional-programming

我正在使用 Haskell 学习函数式编程,现在我想将它与 Javascript 一起使用。

我读到过用 javascripts 重现一些基本功能(如 map 或 filter)是一个很好的培训,所以我决定再次制作它们。

实际上我有这段代码:

'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”对象,因此我无法在我的原型(prototype)函数中访问我的项目。

我如何处理以访问我的映射函数中数组中的每个项目?

感谢您的帮助。

最佳答案

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

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

尝试使用 function 关键字更改您的 map:

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

关于javascript - 原型(prototype)、数组扩展和对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34854601/

相关文章:

javascript - Clojure 启发的传感器可以使用 HM 类型系统进行类型化吗?

algorithm - 在没有循环的情况下向向量的所有条目添加一个值

java - 使用 Java 8 谓词查找 "most"正确值

javascript - 启用/禁用模态弹出按钮

javascript - AngularJS : having multiple functions in a controller

javascript - 如何在嵌入 WinForm 的 WebBrowser 控件中启用 JavaScript,而 WinForm 又嵌入 XBAP 页面?

javascript - 在内存中创建并显示或更改实时元素

functional-programming - 用 "as"字解构 Elm 中的记录

list - 如何在Mathematica中使用函数式编程减去列表中的特定元素?

javascript - JavaScript 中确定数组元素是否连续的最佳方法?