错了'这'扩展Map中的引用
Wrong 'this' reference in extending Map
我正试图在Map<K, V>
接口上编写一个简单的方法。到目前为止,我所做的是:MapExtensions.ts:
interface Map<K, V> {
clone(): Map<K, V>;
}
Map.prototype.clone = () => {
var self = this;
console.log(self);
let retval = new Map();
self.forEach((value, key) => {
retval.set(key, value);
});
//for (let [key, value] of self.entries()) {
// retval.set(key, value);
//}
return retval;
};
然而,在测试该方法时,我最终发现this
参数中的引用错误地引用了Window
对象,因此,self.forEach
不起作用,在测试时它说self.forEach is not a function
(与self.entries()
相同)。这是我的测试脚本:
test("clone test", () => {
//Arrange
const source = new Map().set(1, "abc").set(2, "def").set(3, "ghi");
//Act
const actual = source.clone.bind(source)();//This fails.
//const actual = source.clone();//This too fails.
//Assert
console.log(actual);
console.log(expected);
deepEqual(actual, source, "Cloned correctly");
});
附加信息:
以下是生成的JavaScript输出:
var _this = this;//It seems this is causing the problem. Map.prototype.clone = function () { var self = _this; var retval = new Map(); console.log(self); self.forEach(function (value, key) { retval.set(key, value); }); return retval; };
我使用的是Visual Studio 2015,以及typescript中的默认JavaScript输出生成器。
如何成功做到这一点?
这是因为您使用的是箭头函数。当您需要访问this
时,不要使用箭头函数。
Map.prototype.clone = function() { ... }
相关文章:
- reducers在redux中得到Function not Object,what'it’他错了
- 正在尝试为Docpad网站设置Lunr全文搜索插件.我做错了什么
- 谷歌关闭注释赢得'Don’不要告诉我;I’我错了
- Javascript对象/原型.我的理解错了吗
- 什么'这个随机数猜谜游戏错了
- 重新加载重复数据失败,我做错了什么
- 什么'这个谷歌脚本错了
- 柴如承诺即使错了也会过去
- 什么'Gulp错了
- 我做错了什么
- angular mongodb数组格式写错了
- JavaScript排序算法不起作用 - 任何明显的我做错了
- Google Apps 脚本为 getLastRow 抛出电子邮件失败通知,我做错了什么
- Javascript语法 - 我做错了什么
- 角度灯箱不起作用.我做错了什么
- 在这个猫鼬独特的保存前验证中,我做错了什么
- 我在这里做错了什么?未捕获的引用错误:分配中的左侧无效
- 错了'这'扩展Map中的引用
- 我以为我有一个this引用传递到Javascript闭包中的私有函数,我想错了
- 引用被点击的锚标记:我做错了什么