【发布时间】:2019-12-14 22:28:32
【问题描述】:
为什么(/x/.test)("x") 可以工作,但尝试使用(t=/x/.test)("x") 或t=/x/.test;t("x") 为test 函数提供替代名称会失败?
Firefox 给我一个TypeError: undefined is not a non-null object,而 Chrome 给我一个Uncaught TypeError: Method RegExp.prototype.test called on incompatible receiver undefined。
我知道(t=s=>/x/.test(s))("x") 和t=s=>/x/.test(s);t("x") 可以工作,但我试图理解为什么上面没有。
【问题讨论】:
-
我以前也遇到过这种情况。它与本地类有关。基本上,如果您将类原型中的函数分配给变量,它将失去其“this”值,从而中断。
-
那是因为你打错了
this。你可以使用Function.prototype.bindconst t = function(expr) {return expr.test.bind(expr);}(/X/); -
@AluanHaddad 你能不能把它充实一点,让它成为一个答案?也许进一步解释
this位,因为我的代码不包含任何提及this...
标签: javascript regex function assign return-type