回答編集履歴
6
ネイティブ…
answer
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します(ES5以前の実装では`__proto__`があるとは限りません)。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプになるものなのですが、厳密な呼び方をすると複雑になるため、クラスベースのオブジェクト指向の流儀に則り、ここでは「クラス」と表現し、その「クラス」を雛形とするオブジェクトをその「クラス」の「インスタンス」と表現します。また、「直属のインスタンス」とはそのクラスを直属のプロトタイプとして持つことを示します。
|
11
11
|
|
12
|
-
Objectタイプである値をオブジェクトと言うのでは無かったのか?`Object`クラスのインスタンス以外はObjectタイプじゃないのではないか?と思ったのかも知れません。いえいえ、オブジェクトと呼んでも問題ありません。なぜならプリミティブタイプを除く通常のクラスは全ては`Object`クラスを継承しているからです(ECMAScript規定外のク
|
12
|
+
Objectタイプである値をオブジェクトと言うのでは無かったのか?`Object`クラスのインスタンス以外はObjectタイプじゃないのではないか?と思ったのかも知れません。いえいえ、オブジェクトと呼んでも問題ありません。なぜならプリミティブタイプを除く通常のクラスは全ては`Object`クラスを継承しているからです(ECMAScript規定外のネイティブオブジェクトについてはその限りではありません)。`Funciton`クラスも`Array`クラスも`Object`クラスを拡張したクラスに過ぎません。なので`Function`クラスや`Array`クラスのインスタンスは、同時に、`Object`クラスのインスタンスでもあると見なすことができるのです。なので、これらをまとめて、Objectタイプとし、オブジェクトと読んでいるのです。
|
13
13
|
|
14
14
|
※ `Object.create()`等で作成したconstructorを持たないオブジェクトなど、例外的なオブジェクトも存在します。これらは`Object`クラスのインスタンスではありませんが、Objectタイプであるためオブジェクトです。
|
15
15
|
|
5
1\.と6\.です。
answer
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
5. Objects: 3.を直属の雛形とするオブジェクト。上で「`Object`クラスの直属のインスタンス」のことです。
|
28
28
|
6. object initializer / object literal: 5.を作る初期化子/リテラル。
|
29
29
|
|
30
|
-
1.と
|
30
|
+
1.と6.以外は必ず大文字(固有名詞)で表現されます。
|
31
31
|
|
32
32
|
###プロパティ
|
33
33
|
JavaScriptのプロパティは先ほどのオブジェクトに深く関わります。全てのオブジェクトは名前が付いたプロパティなるものを持ち、それぞれ参照(get)と代入(set)ができます。
|
4
__proto__補足
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
JavaScriptには様々な値(データ)があります。`undefined`、`null`、真偽値(`true`, `false`)、数値(`1`、`3.14`等)、シンボル(`Symbol('abc')`等)、文字列(`'abc'`等)はプリミティブタイプの値で、プリミティブ値と言われ、オブジェクトではありません。それ以外の、例えば、Object(`{a: 0}`等)、関数(`function(x){return x;}`等)、配列(`[0, 1]`等)はそれぞれ、`Object`クラス、`Function`クラス、`Array`クラスのインスタンスであるオブジェクトです。
|
9
9
|
|
10
|
-
※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプになるものなのですが、厳密な呼び方をすると複雑になるため、クラスベースのオブジェクト指向の流儀に則り、ここでは「クラス」と表現し、その「クラス」を雛形とするオブジェクトをその「クラス」の「インスタンス」と表現します。また、「直属のインスタンス」とはそのクラスを直属のプロトタイプとして持つことを示します。
|
10
|
+
※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します(ES5以前の実装では`__proto__`があるとは限りません)。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプになるものなのですが、厳密な呼び方をすると複雑になるため、クラスベースのオブジェクト指向の流儀に則り、ここでは「クラス」と表現し、その「クラス」を雛形とするオブジェクトをその「クラス」の「インスタンス」と表現します。また、「直属のインスタンス」とはそのクラスを直属のプロトタイプとして持つことを示します。
|
11
11
|
|
12
12
|
Objectタイプである値をオブジェクトと言うのでは無かったのか?`Object`クラスのインスタンス以外はObjectタイプじゃないのではないか?と思ったのかも知れません。いえいえ、オブジェクトと呼んでも問題ありません。なぜならプリミティブタイプを除く通常のクラスは全ては`Object`クラスを継承しているからです(ECMAScript規定外のクラスについてはその限りではありません)。`Funciton`クラスも`Array`クラスも`Object`クラスを拡張したクラスに過ぎません。なので`Function`クラスや`Array`クラスのインスタンスは、同時に、`Object`クラスのインスタンスでもあると見なすことができるのです。なので、これらをまとめて、Objectタイプとし、オブジェクトと読んでいるのです。
|
13
13
|
|
3
直属についてちょっと修正
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
JavaScriptには様々な値(データ)があります。`undefined`、`null`、真偽値(`true`, `false`)、数値(`1`、`3.14`等)、シンボル(`Symbol('abc')`等)、文字列(`'abc'`等)はプリミティブタイプの値で、プリミティブ値と言われ、オブジェクトではありません。それ以外の、例えば、Object(`{a: 0}`等)、関数(`function(x){return x;}`等)、配列(`[0, 1]`等)はそれぞれ、`Object`クラス、`Function`クラス、`Array`クラスのインスタンスであるオブジェクトです。
|
9
9
|
|
10
|
-
※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプ
|
10
|
+
※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプになるものなのですが、厳密な呼び方をすると複雑になるため、クラスベースのオブジェクト指向の流儀に則り、ここでは「クラス」と表現し、その「クラス」を雛形とするオブジェクトをその「クラス」の「インスタンス」と表現します。また、「直属のインスタンス」とはそのクラスを直属のプロトタイプとして持つことを示します。
|
11
11
|
|
12
12
|
Objectタイプである値をオブジェクトと言うのでは無かったのか?`Object`クラスのインスタンス以外はObjectタイプじゃないのではないか?と思ったのかも知れません。いえいえ、オブジェクトと呼んでも問題ありません。なぜならプリミティブタイプを除く通常のクラスは全ては`Object`クラスを継承しているからです(ECMAScript規定外のクラスについてはその限りではありません)。`Funciton`クラスも`Array`クラスも`Object`クラスを拡張したクラスに過ぎません。なので`Function`クラスや`Array`クラスのインスタンスは、同時に、`Object`クラスのインスタンスでもあると見なすことができるのです。なので、これらをまとめて、Objectタイプとし、オブジェクトと読んでいるのです。
|
13
13
|
|
@@ -24,7 +24,7 @@
|
|
24
24
|
2. Object type: Objectタイプ(Object型)というtype(型)の一つ。他のtypeは全てプリミティブタイプです。ここでのtypeはJavaScript特有の定義があるため、注意が必要です。一般的な型とは異なりますし、TypeScriptの型とも一致しません。
|
25
25
|
3. Object constructor / Object objects: "Object"という名前(内部的には%Object%という名前)の組み込みオブジェクト(コンストラクタ)。Object(`{}`等)のコンストラクタになる関数であり、プロトタイプです。また、Object自身がいくつかのプロパティを持ちます。上で「`Object`クラス」と言っているそのクラスそのもの事です。
|
26
26
|
4. `Object`: 3.を指すグローバルオブジェクト(global object)のプロパティ。つまり、3.のJavaScriptのコード上での**表現**です。
|
27
|
-
5. Objects: 3.を雛形とするオブジェクト。上で「`Object`クラスのインスタンス」のことです。
|
27
|
+
5. Objects: 3.を直属の雛形とするオブジェクト。上で「`Object`クラスの直属のインスタンス」のことです。
|
28
28
|
6. object initializer / object literal: 5.を作る初期化子/リテラル。
|
29
29
|
|
30
30
|
1.と5.以外は必ず大文字(固有名詞)で表現されます。
|
2
オブジェクトの内容をthink49さんのコメントを参照に改訂
answer
CHANGED
@@ -3,16 +3,32 @@
|
|
3
3
|
**オブジェクト**も**プロパティ**も**引数**も**戻り値**もJavaScriptの用語です。jQurey特有の用語ではありません。また多くのプログラミング言語でも同じ用語をほぼ同じ意味で用いています。
|
4
4
|
|
5
5
|
###オブジェクト
|
6
|
-
広義ではプログラミング言語において、一つのもの、または、まとまりとして扱うことができるあらゆる値(データ)のことを指します。しかし、JavaScriptではObject
|
6
|
+
広義ではプログラミング言語において、一つのもの、または、まとまりとして扱うことができるあらゆる値(データ)のことを指します。しかし、JavaScriptでは__Objectタイプ(Object type)__である値(データ)のことを指します。以下、JavaScriptにおけるオブジェクトについて説明します。
|
7
7
|
|
8
|
-
JavaScriptには様々な値(データ)があります。`undefined`、`null`、真偽値(`true`, `false`)、数値(`1`、`3.14`等)、シンボル(`Symbol('abc')`等)、文字列(`'abc'`等)はプリミティブ値と言われ、オブジェクトではありません。
|
8
|
+
JavaScriptには様々な値(データ)があります。`undefined`、`null`、真偽値(`true`, `false`)、数値(`1`、`3.14`等)、シンボル(`Symbol('abc')`等)、文字列(`'abc'`等)はプリミティブタイプの値で、プリミティブ値と言われ、オブジェクトではありません。それ以外の、例えば、Object(`{a: 0}`等)、関数(`function(x){return x;}`等)、配列(`[0, 1]`等)はそれぞれ、`Object`クラス、`Function`クラス、`Array`クラスのインスタンスであるオブジェクトです。
|
9
9
|
|
10
|
-
|
10
|
+
※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプを持つものなのですが、厳密な呼び方をすると複雑になるため、クラスベースのオブジェクト指向の流儀に則り、ここでは「クラス」と表現し、その「クラス」を雛形とするオブジェクトをその「クラス」の「インスタンス」と表現します。
|
11
11
|
|
12
|
-
|
12
|
+
Objectタイプである値をオブジェクトと言うのでは無かったのか?`Object`クラスのインスタンス以外はObjectタイプじゃないのではないか?と思ったのかも知れません。いえいえ、オブジェクトと呼んでも問題ありません。なぜならプリミティブタイプを除く通常のクラスは全ては`Object`クラスを継承しているからです(ECMAScript規定外のクラスについてはその限りではありません)。`Funciton`クラスも`Array`クラスも`Object`クラスを拡張したクラスに過ぎません。なので`Function`クラスや`Array`クラスのインスタンスは、同時に、`Object`クラスのインスタンスでもあると見なすことができるのです。なので、これらをまとめて、Objectタイプとし、オブジェクトと読んでいるのです。
|
13
13
|
|
14
|
-
|
14
|
+
※ `Object.create()`等で作成したconstructorを持たないオブジェクトなど、例外的なオブジェクトも存在します。これらは`Object`クラスのインスタンスではありませんが、Objectタイプであるためオブジェクトです。
|
15
15
|
|
16
|
+
jQueryも同じです。jQureyライブラリを使うと`jQuery`クラスというクラスが追加されます(`jQuery`は関数でもあります)。これも`Object`クラスを継承しています。`jQurey`クラスのオブジェクトは`$('.abc')`等の書き方で作成できますが、これも`Object`クラスのインスタンスとして性質を持っています。このような`jQuery`クラスのオブジェクトを「**jQueryオブジェクト**」と呼ぶ場合があります。「オブジェクト=jQueryオブジェクト」では決してありませんが、文脈によっては単に「オブジェクト」と言っている場合があるので注意が必要です(そのような書き方をしている書籍やサイトは、著者の知識が足りずにそのように言っている場合がありますので、参考にしないことをお勧めします)。
|
17
|
+
|
18
|
+
なお、`Object`クラスの直属のインスタンス(`{}`や`{a: 1}`等)を単に「オブジェクト」と呼んでいるJavaScriptの書籍やサイトもあります。英語ではこのような「`Object`クラスのオブジェクト」のことを"Objects"(大文字、固有名詞扱い)と表現し、オブジェクトを"objects"(小文字、一般名詞扱い)と表現して分けているのですが、**そのまま直訳してしまった**場合が多いです。原書がある場合は、原書を参考にした方がいいでしょう。(この文章ではこの種類のオブジェクトを単にObjectと表現し、`Object`クラスそのものをさすオブジェクトは`Object`と分けて表現しています。)
|
19
|
+
|
20
|
+
####補足
|
21
|
+
非常にややこしいことに、JavaScriptでは「オブジェクト(object/Object)」と呼ばれるものが複数存在します。
|
22
|
+
|
23
|
+
1. objects: 値(データ)の一種であるオブジェクト。
|
24
|
+
2. Object type: Objectタイプ(Object型)というtype(型)の一つ。他のtypeは全てプリミティブタイプです。ここでのtypeはJavaScript特有の定義があるため、注意が必要です。一般的な型とは異なりますし、TypeScriptの型とも一致しません。
|
25
|
+
3. Object constructor / Object objects: "Object"という名前(内部的には%Object%という名前)の組み込みオブジェクト(コンストラクタ)。Object(`{}`等)のコンストラクタになる関数であり、プロトタイプです。また、Object自身がいくつかのプロパティを持ちます。上で「`Object`クラス」と言っているそのクラスそのもの事です。
|
26
|
+
4. `Object`: 3.を指すグローバルオブジェクト(global object)のプロパティ。つまり、3.のJavaScriptのコード上での**表現**です。
|
27
|
+
5. Objects: 3.を雛形とするオブジェクト。上で「`Object`クラスのインスタンス」のことです。
|
28
|
+
6. object initializer / object literal: 5.を作る初期化子/リテラル。
|
29
|
+
|
30
|
+
1.と5.以外は必ず大文字(固有名詞)で表現されます。
|
31
|
+
|
16
32
|
###プロパティ
|
17
33
|
JavaScriptのプロパティは先ほどのオブジェクトに深く関わります。全てのオブジェクトは名前が付いたプロパティなるものを持ち、それぞれ参照(get)と代入(set)ができます。
|
18
34
|
|
@@ -56,7 +72,7 @@
|
|
56
72
|
};
|
57
73
|
```
|
58
74
|
|
59
|
-
`{'color':'red'}`という表現は、名前が`'color'`、値が`'red'`というプロパティを持つObject
|
75
|
+
`{'color':'red'}`という表現は、名前が`'color'`、値が`'red'`というプロパティを持つObjectのリテラル表現であり、そのObjectを生成しているだけに過ぎません。
|
60
76
|
|
61
77
|
|
62
78
|
###引数と戻り値
|
1
コードの指摘部分修正
answer
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
var obj = {
|
51
51
|
num: 0, // 数値
|
52
52
|
str: 'abc', // 文字列
|
53
|
-
ary: [0, 'abc], // 配列
|
53
|
+
ary: [0, 'abc'], // 配列
|
54
54
|
fun: function(x) { return x * 2; }, // 関数も入る
|
55
55
|
'x:y': 1 // 記号も '' 等で囲めば可能。
|
56
56
|
};
|