此arguments.callee实例的严格模式替代方案

Strict mode alternatives to this instanceof arguments.callee

本文关键字:模式 方案 arguments callee 实例      更新时间:2023-09-26

有一个老技巧(我在SO上学到的)可以抓住将构造函数作为函数调用的问题,即忘记new关键字。下面,或者类似的东西,它进入顶部的每个构造函数。

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

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

能否保留其通用性?或者我们必须使用构造函数的名称来代替arguments.callee

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