Typescript奇怪的行为扩展数字

时间:2017-09-14 08:08:14

标签: javascript typescript prototype ecmascript-5

我正在扩展Number对象,因此会有一个函数toKM()将距离(以米为单位)转换为公里。

当我使用以下语法时(IMO是Typescript的默认语法),函数无效。



interface Number {
  toKM(): number
}

Number.prototype.toKM = () => {
  return this / 1000
}

let alfa = 3456
document.write(alfa.toKM())




当我使用"传统"形式:



interface Number {
  toKM(): number
}

Number.prototype.toKM = function() {
  return this / 1000
}

let alfa = 3456
document.write(alfa.toKM())




是否存在新语法不起作用的特殊情况?

1 个答案:

答案 0 :(得分:3)

如果您使用箭头函数,Typescript将从声明上下文中捕获此函数,如果您在es6下面定位,则代码将编译为此函数:

var _this = this;
Number.prototype.toKM = function () {
    return _this / 1000;
};

如果你使用纯JS(es2015或更高版本),箭头函数将没有工作事件,因为它们的行为将等同于上面的JS。

您需要使用常规函数并指定this

的类型
Number.prototype.toKM = function(this: number) {
  return this / 1000
}