使用错误的'this'指针在typescript中扩展Number原型

时间:2016-04-25 17:51:23

标签: typescript

我的应用程序中有一些代码扩展了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代码中正确访问数字值?

提前感谢...

1 个答案:

答案 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值。