为什么RegExp Prototype不能正常工作?

时间:2017-10-27 00:03:11

标签: javascript

RegExp.prototype仅适用于:

var a = /abc/g
a.tester()

var b = /xyz/
b.tester()

不适用于:

  1. /abc/g.tester()
  2. /abc/.tester()

  3. 有没有办法可以解决这个问题,以便三者都可以工作?

    平视
    它必须是RegExp.prototype
    问题:原生.test()如何做到这一点?



    什么有用

    RegExp.prototype.tester = function(s, v) {
      console.log("I'm working")
      console.log(this)
    }
    
    a = /abc/g
    b = /xyz/
    a.tester()
    b.tester()




    问题

    RegExp.prototype.tester = function(s, v) {
      console.log("I'm working")
      console.log(this)
    }
    
    /abc/g.tester() //This is a problem
    /abc/.tester() //This is a problem

1 个答案:

答案 0 :(得分:3)

它只是一个语法错误,而不是原型继承的问题(并且调用.test而不是.tester不会有所作为)。用分号!

RegExp.prototype.tester = function (s,v) {
    console.log("I'm working")
    console.log(this)
}; /*
 ^ */

/abc/g.tester(); // now it's not a problem
/abc/.tester();  // any more

这里发生的是解析器将您的代码解释为一个大型语句:

… = function(){…} / abc / g.tester() / abc / .tester();

事实上,除法运算符.之后的属性访问/是一个意外的令牌。

如果您想省略分号,let them be automatically inserted需要可能的,那么( [开头的每一行都会need to put one at the begin },/+-`