我正在使用 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/