13

有一个老技巧(我在 SO 上学到的)来捕捉调用构造函数作为函数,即忘记new关键字。以下,或类似的,它进入顶部的每个构造函数。

if (!(this instanceof arguments.callee)) {
    throw Error("Constructor called as a function");
}

当您需要时,有哪些替代方案"use strict";

可以保留其通用性吗?还是我们必须使用构造函数的名称来代替arguments.callee

4

1 回答 1

5

arguments.callee它本身已被弃用,取而代之的是命名函数表达式。虽然我不一定同意这一举动,但事情就是这样发展的。因此,用arguments.callee函数名替换是严格模式下的唯一方式,也是非严格模式下的首选方式。

于 2011-06-25T19:57:42.243 回答