使用错误的'this'指针扩展打字稿中的数字原型



我的应用程序中有一些代码可以扩展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值。

最新更新