回答編集履歴

6

ネイティブ…

2016/10/29 22:42

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- Objectタイプである値をオブジェクトと言うのでは無かったのか?`Object`クラスのインスタンス以外はObjectタイプじゃないのではないか?と思ったのかも知れません。いえいえ、オブジェクトと呼んでも問題ありません。なぜならプリミティブタイプを除く通常のクラスは全ては`Object`クラスを継承しているからです(ECMAScript規定外のクラスについてはその限りではありません)。`Funciton`クラスも`Array`クラスも`Object`クラスを拡張したクラスに過ぎません。なので`Function`クラスや`Array`クラスのインスタンスは、同時に、`Object`クラスのインスタンスでもあると見なすことができるのです。なので、これらをまとめて、Objectタイプとし、オブジェクトと読んでいるのです。
23
+ Objectタイプである値をオブジェクトと言うのでは無かったのか?`Object`クラスのインスタンス以外はObjectタイプじゃないのではないか?と思ったのかも知れません。いえいえ、オブジェクトと呼んでも問題ありません。なぜならプリミティブタイプを除く通常のクラスは全ては`Object`クラスを継承しているからです(ECMAScript規定外のネイティブオブジェについてはその限りではありません)。`Funciton`クラスも`Array`クラスも`Object`クラスを拡張したクラスに過ぎません。なので`Function`クラスや`Array`クラスのインスタンスは、同時に、`Object`クラスのインスタンスでもあると見なすことができるのです。なので、これらをまとめて、Objectタイプとし、オブジェクトと読んでいるのです。
24
24
 
25
25
 
26
26
 

5

1\.と6\.です。

2016/10/29 22:42

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
 
58
58
 
59
- 1.と5.以外は必ず大文字(固有名詞)で表現されます。
59
+ 1.と6.以外は必ず大文字(固有名詞)で表現されます。
60
60
 
61
61
 
62
62
 

4

__proto__補足

2016/10/29 22:40

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- ※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプになるものなのですが、厳密な呼び方をすると複雑になるため、クラスベースのオブジェクト指向の流儀に則り、ここでは「クラス」と表現し、その「クラス」を雛形とするオブジェクトをその「クラス」の「インスタンス」と表現します。また、「直属のインスタンス」とはそのクラスを直属のプロトタイプとして持つことを示します。
19
+ ※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します(ES5以前の実装では`__proto__`があるとは限りません)。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプになるものなのですが、厳密な呼び方をすると複雑になるため、クラスベースのオブジェクト指向の流儀に則り、ここでは「クラス」と表現し、その「クラス」を雛形とするオブジェクトをその「クラス」の「インスタンス」と表現します。また、「直属のインスタンス」とはそのクラスを直属のプロトタイプとして持つことを示します。
20
20
 
21
21
 
22
22
 

3

直属についてちょっと修正

2016/10/29 22:39

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- ※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプを持つものなのですが、厳密な呼び方をすると複雑になるため、クラスベースのオブジェクト指向の流儀に則り、ここでは「クラス」と表現し、その「クラス」を雛形とするオブジェクトをその「クラス」の「インスタンス」と表現します。
19
+ ※ JavaScriptはクラスベースではなく、プロトタイプベースです。そのため、__クラス__なるものがあるわけではありません。class構文は存在しますが、プロトタイプベースの糖衣構文に過ぎません。あるクラスのインスタンスというのは、厳密にはそれらのクラスである関数オブジェクトをコンストラクタとし、それらが持つ`prototype`を`__proto__`に設定されていることを示します。`Object`等はオブジェクトであり、コンストラクタとして使える関数であり、プロトタイプになるものなのですが、厳密な呼び方をすると複雑になるため、クラスベースのオブジェクト指向の流儀に則り、ここでは「クラス」と表現し、その「クラス」を雛形とするオブジェクトをその「クラス」の「インスタンス」と表現します。また、「直属のインスタンス」とはそのクラスを直属のプロトタイプとして持つことを示します。
20
20
 
21
21
 
22
22
 
@@ -50,7 +50,7 @@
50
50
 
51
51
  4. `Object`: 3.を指すグローバルオブジェクト(global object)のプロパティ。つまり、3.のJavaScriptのコード上での**表現**です。
52
52
 
53
- 5. Objects: 3.を雛形とするオブジェクト。上で「`Object`クラスのインスタンス」のことです。
53
+ 5. Objects: 3.を直属の雛形とするオブジェクト。上で「`Object`クラスの直属のインスタンス」のことです。
54
54
 
55
55
  6. object initializer / object literal: 5.を作る初期化子/リテラル。
56
56
 

2

オブジェクトの内容をthink49さんのコメントを参照に改訂

2016/10/29 22:30

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -8,23 +8,55 @@
8
8
 
9
9
  ###オブジェクト
10
10
 
11
- 広義ではプログラミング言語において、一つのもの、または、まとまりとして扱うことができるあらゆる値(データ)のことを指します。しかし、JavaScriptではObject型の値(データ)のことを指します。以下、JavaScriptにおけるオブジェクトについて説明します。
11
+ 広義ではプログラミング言語において、一つのもの、または、まとまりとして扱うことができるあらゆる値(データ)のことを指します。しかし、JavaScriptでは__Objectタイプ(Object type)__である値(データ)のことを指します。以下、JavaScriptにおけるオブジェクトについて説明します。
12
12
 
13
13
 
14
14
 
15
- JavaScriptには様々な値(データ)があります。`undefined`、`null`、真偽値(`true`, `false`)、数値(`1`、`3.14`等)、シンボル(`Symbol('abc')`等)、文字列(`'abc'`等)はプリミティブ値と言われ、オブジェクトではありません。しかし、Objectオブジェクト(`{a: 0}`等)、関数(`function(x){return x;}`等)、配列(`[0, 1]`等)はそれぞれ、Object、Function、Arrayのオブジェクトです。
15
+ JavaScriptには様々な値(データ)があります。`undefined`、`null`、真偽値(`true`, `false`)、数値(`1`、`3.14`等)、シンボル(`Symbol('abc')`等)、文字列(`'abc'`等)はプリミティブタイプので、プリミティブ値と言われ、オブジェクトではありません。それ以外の例えば、Object(`{a: 0}`等)、関数(`function(x){return x;}`等)、配列(`[0, 1]`等)はそれぞれ、`Object`クラス`Function`クラス`Array`クラスインスタンスであるオブジェクトです。
16
16
 
17
17
 
18
18
 
19
- Object型の値をオブジェクトと言うのは無かったか?と思っのかも知れません。でもオブジェトと呼んで問題ありません。なぜならプリミティブ型を除く全ての型Object型を継承ているからで。Funciton型もArray型もObject型を拡張した型に過ぎません。のでFunction型やArray型のオブジェクト同時Object型のオブジェクトであると見なすことできるのです。
19
+ ※ JavaScriptラスベースではなく、プロタイプベースす。そのた__ラス__なるのがるわけではありません。class構文存在が、プロトタイプベースの糖衣構文に過ぎません。あるクラスインスタンスというのは、厳密にはそれらのクラスある関数オブジェクトをコンストラクタとしそれらが持つ`prototype`を`__proto__`設定されていることを示します。`Object`等はオブジェクトであり、コンストラクタとして使え関数であり、プロトタイプを持つもののですが、厳密な呼び方をすと複雑になるため、クラスベースオブジェクト指向の流儀に則り、ここは「クラス」と表現し、その「クラス」を雛形とるオブジェクトをその「クラス」の「インスタンス」と表現します
20
20
 
21
21
 
22
22
 
23
- jQueryも同じです。jQureyライブラリを使うとjQuery型という型が追加されます。これもObject継承しています。jQurey型のオブジェクトは`$('.abc')`書き方で作成できますが、これもObjectオブジェクトして性質を持ていこのようなjQuery型のオブジェクトを「**jQueryオブジェクト**」と呼ぶ場合がありま「オジェト=jQueryオブジェト」では決してありませんが、文脈よって「オブジェト」言っている場合るので注意が必要で(そような書き方いる書籍やサイトは、著者の知識が足りずにそのように言っている場合がありますので、参考にしないことをお勧めしま)
23
+ Objectタイプである値をオブジェクトと言うので無かったのか?`Object`クラスインスタンス以外はObjectタイプじゃないではないか?たのかも知れせんいえいえ、オブジェクトと呼んでも問題ありませんなぜならプリミティタイプを除く通常のラスは全ては`Object`クラスを継承しているからです(ECMAScript規定外のラスについてはその限りではありません)。`Funciton`クラスも`Array`クラスも`Object`クラスを拡張したクラス過ぎません。なので`Function`クラスや`Array`クラスのインスタンス、同時、`Object`ラスのインスタンスでもある見なすことできるのです。なで、これらまとめ、Objectタプとし、オブジェクと読んでいるのです。
24
24
 
25
25
 
26
26
 
27
- なお、Object型のオブジェクトを単に「オブジェクト」と呼んでいるJavaScriptの書籍やサイトあります。英語でObjectオブジェクト」を"Objects"(大文字、固有名詞扱い)と表現し、オブジェクトを"objects"(小文字、一般名詞扱い)と表現して分けているものを**そのまま直訳してしまった**場合に多いです。原書がある場合は、原書を参考にした方がいいでしょう。
27
+ ※ `Object.create()`等で作成したconstructorを持たないオブジェクトなど、例外的なオブジェクトも存在します。これら`Object`クラスインスタンスではありませんが、Objectタイプであるためオブジェクトです。
28
+
29
+
30
+
31
+ jQueryも同じです。jQureyライブラリを使うと`jQuery`クラスというクラスが追加されます(`jQuery`は関数でもあります)。これも`Object`クラスを継承しています。`jQurey`クラスのオブジェクトは`$('.abc')`等の書き方で作成できますが、これも`Object`クラスのインスタンスとして性質を持っています。このような`jQuery`クラスのオブジェクトを「**jQueryオブジェクト**」と呼ぶ場合があります。「オブジェクト=jQueryオブジェクト」では決してありませんが、文脈によっては単に「オブジェクト」と言っている場合があるので注意が必要です(そのような書き方をしている書籍やサイトは、著者の知識が足りずにそのように言っている場合がありますので、参考にしないことをお勧めします)。
32
+
33
+
34
+
35
+ なお、`Object`クラスの直属のインスタンス(`{}`や`{a: 1}`等)を単に「オブジェクト」と呼んでいるJavaScriptの書籍やサイトもあります。英語ではこのような「`Object`クラスのオブジェクト」のことを"Objects"(大文字、固有名詞扱い)と表現し、オブジェクトを"objects"(小文字、一般名詞扱い)と表現して分けているのですが、**そのまま直訳してしまった**場合が多いです。原書がある場合は、原書を参考にした方がいいでしょう。(この文章ではこの種類のオブジェクトを単にObjectと表現し、`Object`クラスそのものをさすオブジェクトは`Object`と分けて表現しています。)
36
+
37
+
38
+
39
+ ####補足
40
+
41
+ 非常にややこしいことに、JavaScriptでは「オブジェクト(object/Object)」と呼ばれるものが複数存在します。
42
+
43
+
44
+
45
+ 1. objects: 値(データ)の一種であるオブジェクト。
46
+
47
+ 2. Object type: Objectタイプ(Object型)というtype(型)の一つ。他のtypeは全てプリミティブタイプです。ここでのtypeはJavaScript特有の定義があるため、注意が必要です。一般的な型とは異なりますし、TypeScriptの型とも一致しません。
48
+
49
+ 3. Object constructor / Object objects: "Object"という名前(内部的には%Object%という名前)の組み込みオブジェクト(コンストラクタ)。Object(`{}`等)のコンストラクタになる関数であり、プロトタイプです。また、Object自身がいくつかのプロパティを持ちます。上で「`Object`クラス」と言っているそのクラスそのもの事です。
50
+
51
+ 4. `Object`: 3.を指すグローバルオブジェクト(global object)のプロパティ。つまり、3.のJavaScriptのコード上での**表現**です。
52
+
53
+ 5. Objects: 3.を雛形とするオブジェクト。上で「`Object`クラスのインスタンス」のことです。
54
+
55
+ 6. object initializer / object literal: 5.を作る初期化子/リテラル。
56
+
57
+
58
+
59
+ 1.と5.以外は必ず大文字(固有名詞)で表現されます。
28
60
 
29
61
 
30
62
 
@@ -114,7 +146,7 @@
114
146
 
115
147
 
116
148
 
117
- `{'color':'red'}`という表現は、名前が`'color'`、値が`'red'`というプロパティを持つObjectオブジェクトのリテラル表現であり、そのObjectオブジェクトを生成しているだけに過ぎません。
149
+ `{'color':'red'}`という表現は、名前が`'color'`、値が`'red'`というプロパティを持つObjectのリテラル表現であり、そのObjectを生成しているだけに過ぎません。
118
150
 
119
151
 
120
152
 

1

コードの指摘部分修正

2016/10/29 22:22

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
  str: 'abc', // 文字列
104
104
 
105
- ary: [0, 'abc], // 配列
105
+ ary: [0, 'abc'], // 配列
106
106
 
107
107
  fun: function(x) { return x * 2; }, // 関数も入る
108
108