JavaScript プリミティブでは、プロトタイプ チェーンがありません。オブジェクトのみが行います。プリミティブ値には次が含まれます。
- ブール値
- 数字
- ストリングス
- ヌル
- 未定義
したがってisPrototypeOf、プリミティブ値で呼び出すと、常に が返されfalseます。
ブール値、数値、または文字列をオブジェクトとして使用しようとすると、JavaScript によって自動的にオブジェクトに変換されます。したがって、舞台裏でa.constructor評価されます。new Number(a).constructorこれが、プリミティブ値をオブジェクトとして使用できる理由です。
プリミティブ値を格納する変数をオブジェクトとして頻繁に使用する場合は、明示的にオブジェクトにすることをお勧めします。たとえば、あなたの場合、aas として定義する方が良いでしょうnew Number(12)。利点は次のとおりです。
- JavaScript は、プリミティブをオブジェクトとして使用しようとするたびに、プリミティブをオブジェクトに強制する必要はありません。オブジェクトは 1 回だけ作成します。したがって、パフォーマンス効率が高いです。
- あなたの場合のメソッドは、のインスタンスになるよう
isPrototypeOfに返さtrueれます。したがって、プロトタイプチェーンに含まれます。aNumberNumber.prototype