我的应用程序中有一些代码扩展了JavaScript中的Number原型,用于更安全的除法运算符,如下所示:
_.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 。 _这不是数值(它是窗口),除法返回NaN。
“this”是数字,“_ this”是窗口。
这是预期的吗?有没有办法在原始的TypeScript代码中正确访问数字值?
提前感谢...
答案 0 :(得分:1)
使用函数表达式:
_.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
值。