回答編集履歴

3

Objectのインスタンスではなく、Functionのインスタンスであることを修正

2020/11/16 07:20

投稿

miyabi_pudding
miyabi_pudding

スコア9555

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
  クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス宣言をした際、それがそのままインスタンスオブジェクトとなるのが特徴です。
82
82
 
83
- (クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、本質的にはObjectプロトタイプのインスタンスとなる)
83
+ (クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、`Funtion`プロトタイプのインスタンスとなる)
84
84
 
85
85
  Rubyのように、クラスベースであっても、宣言した際に、クラスオブジェクトとして扱える言語はいくつか存在していますが、
86
86
 

2

語弊がある箇所を修正

2020/11/16 07:20

投稿

miyabi_pudding
miyabi_pudding

スコア9555

test CHANGED
@@ -1,12 +1,44 @@
1
- 何をもって、質問者さんが**オブジェクト**としているかによりますが、
1
+ 何をもって、質問者さんが**オブジェクト**としているかによりますが、
2
2
 
3
3
  JavaScriptにおいては、
4
4
 
5
5
  **プリミティブ値も厳密に言えばオブジェクト**です。
6
6
 
7
- なぜなら、
7
+ ~~なぜなら、
8
8
 
9
- 数値も、文字列も、論理値なども、プロパティもメソッドも持ち合わせるからです。
9
+ 数値も、文字列も、論理値なども、プロパティもメソッドも持ち合わせるからです。~~
10
+
11
+ ↑すみません、語弊がありました。
12
+
13
+ 確かにメソッドを実行することはできますが、
14
+
15
+ あくまで、値であり、宣言以降は、値自体は不変です。
16
+
17
+ 例えば、下記のようにした際、
18
+
19
+ ```javascript
20
+
21
+ let str = 'hoge';
22
+
23
+ str.replace('h', '');
24
+
25
+ console.log(str); // hoge
26
+
27
+ ```
28
+
29
+ となり、値自体は不変です。
30
+
31
+ (`str = str.replace('h', '');`と、再代入した場合は、当然値が変わる)
32
+
33
+
34
+
35
+ ただし、これは、**JavaScriptにおけるオブジェクトデータ型ではない**、ということです。
36
+
37
+ 値を返すメソッドを実行できる時点で、
38
+
39
+ **オブジェクト指向においてのオブジェクトとは言える**ということです。
40
+
41
+ (なので、質問者さんが何を持ってオブジェクトと指しているかによる、と前段の記載になりました)
10
42
 
11
43
 
12
44
 

1

語弊がある回答となっていたので、修正

2020/11/16 03:16

投稿

miyabi_pudding
miyabi_pudding

スコア9555

test CHANGED
@@ -44,8 +44,14 @@
44
44
 
45
45
 
46
46
 
47
- また、クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス宣言をした際、それが即時オブジェクトとなる、
47
+ ## 余談
48
48
 
49
- という点(あくまで内部的にはプロトタイプで)は、他のクラスベース語とは違った挙動をしまで、注意必要です。
49
+ クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス言をした際、それがそのまインスタンスオブジェクトとなるのが特徴です。
50
50
 
51
+ (クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、本質的にはObjectプロトタイプのインスタンスとなる)
52
+
53
+ Rubyのように、クラスベースであっても、宣言した際に、クラスオブジェクトとして扱える言語はいくつか存在していますが、
54
+
51
- クラスベース言語だとクラ宣言時にはスタティックなクラスであると示さないオブジェクト的使方はできないこがほとんど)
55
+ 多くのクラスベース言語では、スタティックなプロパティやメソッドがない場合はインスタンス化をしないと
56
+
57
+ 基本的には、プロパティにアクセスや、メソッドを実行などのインスタンスオブジェクト的扱いをすることができません。