私は、以前の答えでは比喩的で不可解すぎると思います。説明が続きます。
Array、Boolean、Date、Function、Number、RegExp、Stringのインスタンスはオブジェクトですが、各タイプに固有のメソッドとプロパティで拡張されています。たとえば、配列には定義済みのlength
プロパティがありますが、一般的なオブジェクトにはありません。
javascript:alert([].length+'\n'+{}.length)
ディスプレイ
0
未定義
本質的に、FF Geckoインタープリターは、言語構造を評価する明確な違いがある配列と汎用オブジェクトを区別します。
javascript:
ra=[ "one", "two", "three"]; ra.a=4;
ob={0:"one", 1:"two", 2:"three"}; ob.a=4;
alert(
ra +"\n\n"+
ob +"\n\n"+
ra.toSource() +"\n\n"+
ra.a +"\t .toSource() forgot me! \n\n"+
ra.length +"\t and my length! \n\n"+
ob.toSource());
ps=""; for(i in ra)ps+=i+" "; alert(ps); /* NB .length is missing! */
ps=""; for(i in ob)ps+=i+" "; alert(ps);
表示
一二三
[オブジェクトオブジェクト]
["一二三"]
4 .toSource()は私を忘れました!
3と私の長さ!
({0: "1"、1: "2"、2: "3"、a:4})
と0 1 2 a
と0 1 2 a
。
すべてのオブジェクトが関数であるというステートメントについて:
123()
or "abc"()
または[]()
or {}()
またはobj()
where obj
が以外のタイプの関数として任意のオブジェクトインスタンスを関数として使用することは、構文的にも意味的にも正しくないFunction
ため、任意のオブジェクトINSTANCEはではありませんFunction
。ただし、オブジェクトobj
とタイプがのArray, Boolean, Date, ...
場合、どのようにしobj
てになりましたArray, Boolean, Date, ...
か?とはArray, Boolean, Date, ...
?
javascript:
alert([Array, Boolean, Date, Function,
Number, Object, RegExp, String] . join('\n\n') );
ディスプレイ
function Array() {
[native code]
}
function Boolean() {
[native code]
}
function Date() {
[native code]
}
function Function() {
[native code]
}
function Number() {
[native code]
}
function Object() {
[native code]
}
function RegExp() {
[native code]
}
function String() {
[native code]
}
いずれの場合も、等価でない場合、オブジェクトタイプはfunction
定義として明示されるため、すべてのオブジェクトは関数であるというステートメントです。(意地悪は、オブジェクトのインスタンスとそのタイプの区別を意図的に覆い隠してぼやけたものです!それでも、これは「もう1つなしでは1つを持たない」ことを示しています!オブジェクトと関数!インスタンスとは反対です。)
機能とオブジェクトの両方のパラダイムは、JSインタープリターの低レベルの組み込みプリミティブ(Math
and JSON
やなど)のプログラミングと実装の基本であるようtrue
です。
javascript:alert([Math, JSON, true.toSource()].join("\n\n"));
ディスプレイ
[object Math]
[object JSON]
(new Boolean(true))
Javascriptの開発時には、オブジェクト中心のプログラミングスタイル(OOPの-オブジェクト指向プログラミングスタイル-"の"は私自身の駄洒落です!) 。関数型プログラミング手法は、オートマトン、再帰関数、形式言語などの理論を研究する、より抽象的で難解な試験に追いやられました。ただし、これらの正式な考慮事項の長所は、特にFFのGeckoエンジン(つまり.toSource()
)に実装されているJavascriptに明らかに現れています。
関数のオブジェクト定義は、繰り返し関係として定義されているため、特に満足です!独自の定義を使用して定義されています!
function Function() { [native code] }
関数はオブジェクトなので、と同じ感情が保持され
function Object() { [native code] }
ます。
他の定義のほとんどは、静的なターミナル値に静止します。ただし、これeval()
は特に強力なプリミティブであるため、文字列は任意の機能を埋め込むこともできます。
繰り返しますが、上記で使用されている用語は、オブジェクトタイプとインスタンスの区別を覆い隠しています。