JavaScript オブジェクトの興味深い性質
プログラミングの奥深くでは、JavaScript の世界には予期せぬ展開が見られます。すべてがオブジェクトであるわけではありません。 。多くの入門書では「ほぼすべて」がこの分類に該当するとほのめかされていますが、詳しく調べると別の真実が明らかになります。
その中核では、オブジェクトはメソッドとプロパティを通じて機能をカプセル化します。たとえば、配列は、固有のキーと値のペアでこの型に適合します。ただし、「文字列」、「数値」、および「関数」になると、境界線がぼやけます。
これらのエンティティは、入力に対して変換を実行し、プロパティやプロパティに明確にアクセスせずに出力を生成する関数に似ているように見えるかもしれません。方法。このような場合、ドット表記は明らかに存在しないままです。
ラッパーの難題
謎を明らかにすると、微妙な違いが明らかになります。これらのプリミティブは、知られているように、物の本質。代わりに、それらはオブジェクトのガーメント、つまり String、Number、Boolean でラップされます。これらのラッパーはメソッドとプロパティを備えており、オブジェクトの動作を錯覚させます。
たとえば、次のコードを考えてみましょう。
var s = "foo"; var sub = s.substring(1, 2); // sub becomes "o"
舞台裏で、JavaScript は一連の隠れたステップを実行します。
の錯覚プロパティ
プリミティブにはプロパティを割り当てることができるように見えますが、次の例で示すように、そのような試みは無駄であることがわかります。
var s = "foo"; s.bar = "cheese"; alert(s.bar); // undefined
これは、プロパティが定義されているために発生します。一時的な String ラッパー オブジェクト。すぐに破棄され、プロパティがレンダリングされます。
関数: 変装したオブジェクト
プリミティブとは異なり、関数は Object を継承する本格的なオブジェクトです。これは、オブジェクトが独自のプロパティを持つ機能を含む、オブジェクトのすべての機能を備えていることを意味します。次の例を見てください:
function foo() {} foo.bar = "tea"; alert(foo.bar); // tea
結論
JavaScript では、すべてがオブジェクトの外套を身につけるわけではありません。オブジェクト ラッパーによって偽装されたプリミティブは、オブジェクトの動作の錯覚を作成します。 JavaScript の複雑さをより深く理解することによってのみ、そのオブジェクトの本当の性質が明らかになります。
以上がJavaScript プリミティブは本当にオブジェクトですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。