Javascript 分配正则表达式';s的测试功能失败

Javascript 分配正则表达式';s的测试功能失败,javascript,regex,function,assign,return-type,Javascript,Regex,Function,Assign,Return Type,为什么(/x/.test)(“x”)起作用,但试图给test函数一个带有(t=/x/.test)(“x”)或t=/x/.test的替代名称;t(“x”)失败 Firefox给了我一个TypeError:undefined不是一个非空对象,而Chrome给了我一个Uncaught TypeError:Method RegExp.prototype.test调用了不兼容的receiver undefined 我意识到(t=s=>/x/.test)(“x”)和t=s=>/x/.test;t(“x”)起

为什么
(/x/.test)(“x”)
起作用,但试图给
test
函数一个带有
(t=/x/.test)(“x”)
t=/x/.test的替代名称;t(“x”)
失败

Firefox给了我一个
TypeError:undefined不是一个非空对象
,而Chrome给了我一个
Uncaught TypeError:Method RegExp.prototype.test调用了不兼容的receiver undefined


我意识到
(t=s=>/x/.test)(“x”)
t=s=>/x/.test;t(“x”)
起作用,但我正在试图理解为什么上面的内容不起作用。

我将再次尝试解释:/x/.test或(/x/.test)此表达式的执行方式如下:

  /x/: a regular expression object is created. Similar to: new  RegExp (/x/).


 .test: The RegExp "test()" method is invoked. The string parameter of "test" method is mandatory. Not finding the parameterThen it returns error.
工作原理:函数f(s){};g=f; 因为您正在将函数f赋给变量g。此赋值不执行f。与g=f()不同的是,在本例中,g将具有函数f返回的值

为什么不工作:t=/x/.test,因为/x/正在创建RegExp对象或调用其构造函数。然后,当返回此对象时,它会找到一个对test的调用,因此,它会执行该调用,但test没有所需的参数,因此会发生错误。您可以这样做:t=/x/;t、 测试(“x”);首先分配一个正则表达式对象,然后调用测试方法


我希望现在能理解我。

我以前也曾遇到过这种情况。它与本机类有关。基本上,如果您将函数从类原型分配给变量,它将丢失其“this”值,从而中断。这是因为您的
this
错误。您可以使用
Function.prototype.bind
const t=Function(expr){return expr.test.bind(expr);}(/X/)
@AluanHaddad你能不能把它具体化一点,并把它变成一个答案?也许可以进一步解释一下
这个
,因为我的代码没有提到
这个
…这并没有回答我的问题。我的问题是为什么?问题,不是一个问题,我如何才能使这项工作?问题.t=/x/.test或(t=/x/.test)您可以指定一个“t”来执行常规的表达式方法test“而不带参数”。您确定吗?我认为函数调用需要括号。
f=s=>s+s;g=f;g(2)
正确地给出了4,而
f=s=>s+s;g=f()
使
g
be
NaN/code>和
g(2)
给出一个
TypeError
。但这是lambda函数非assignment我不理解其中的区别,但也许您可以编辑您的答案,通过解释来解决我的问题?