我的应用程序中有一些代码可以扩展JavaScript中的数字原型,以获得更安全的除法运算符,如下所示:
_.extend(Number.prototype, {
divide: (denominator, default_val) => {
var ret_val;
if (is_numeric(denominator) && denominator !== 0) {
ret_val = this / denominator;
} else {
ret_val = default_val || 0;
}
return ret_val;
}
}
可以说,执行此代码是不合适的,但它始终按预期工作。
我正在将我的应用程序转换为TypeScript(我刚刚学习),当这段代码被转换为JavaScript时,它的结果是这样的:
_.extend(Number.prototype, {
divide: function (denominator, default_val) {
var ret_val;
if (is_numeric(denominator) && denominator !== 0) {
ret_val = _this / denominator;
}
else {
ret_val = default_val || 0;
}
return ret_val;
}
}
请注意,现在_this。 _this不是数值(它是窗口),除法返回 NaN。
"this"是数字,"_this"是窗口。
这是意料之中的吗? 有没有办法在原始 TypeScript 代码中正确访问数字值?
提前感谢...
使用函数表达式:
_.extend(Number.prototype, {
divide: function(denominator, default_val) {
var ret_val;
if (is_numeric(denominator) && denominator !== 0) {
ret_val = this / denominator;
} else {
ret_val = default_val || 0;
}
return ret_val;
}
}
函数表达式不会以词法方式绑定this
值。