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 に答える