代码之家  ›  专栏  ›  技术社区  ›  Eric

JavaScript RegExp隐式方法是否已弃用?

  •  2
  • Eric  · 技术社区  · 15 年前

    在过去的Windows COM时代,你可以输入

    val = obj(arguments)
    

    val = obj.defaultMethod(arguments)
    

    我刚刚发现JavaScript有同样的东西:RegExp对象的默认方法 显示为“exec”,如

    /(\w{4})/('yip jump man')[1]
    ==> jump
    

    当RegExp对象被分配给变量时,甚至当 它是用RegExp构造函数创建的,而不是 /.../ 对我们这些引用透明的粉丝来说。

    2 回复  |  直到 15 年前
        1
  •  6
  •   Christian C. Salvadó    15 年前

    此功能是 ,一些实现如Mozilla(Spidermonkey和Rhino)和googlechrome(V8)都包含了它,但是我会 极度泄气 它的用法,因为它不是规范的一部分。

    这些实现使 RegExp 可赎回的 .exec 方法。

    在Chrome(和Firefox 2.x)中,即使使用 typeof 具有 对象,你得到 "function" (因为他们执行 [[Call]] 内部方法)。

    typeof /foo/ == "function"; // true
    

    regexp(str);
    

    regexp.exec(str);
    

    这是略有记录 here 由Mozilla提供。

        2
  •  0
  •   Casey Chu    15 年前

    所有函数都是对象,所以你可以这样做:

    var obj = function () {
        alert('Doing my default!');
    };
    obj.prop1 = 'Hello world';
    obj.prop2 = function () {
        alert('Other method');
    };
    
    obj(); // 'Doing my default!'
    alert(obj.prop1); // 'Hello world'
    obj.prop2(); // 'Other method'