回答編集履歴
3
Objectのインスタンスではなく、Functionのインスタンスであることを修正
test
CHANGED
@@ -80,7 +80,7 @@
|
|
80
80
|
|
81
81
|
クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス宣言をした際、それがそのままインスタンスオブジェクトとなるのが特徴です。
|
82
82
|
|
83
|
-
(クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、
|
83
|
+
(クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、`Funtion`プロトタイプのインスタンスとなる)
|
84
84
|
|
85
85
|
Rubyのように、クラスベースであっても、宣言した際に、クラスオブジェクトとして扱える言語はいくつか存在していますが、
|
86
86
|
|
2
語弊がある箇所を修正
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
語弊がある回答となっていたので、修正
test
CHANGED
@@ -44,8 +44,14 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
-
|
47
|
+
## 余談
|
48
48
|
|
49
|
-
|
49
|
+
クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス宣言をした際、それがそのままインスタンスオブジェクトとなるのが特徴です。
|
50
50
|
|
51
|
+
(クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、本質的にはObjectプロトタイプのインスタンスとなる)
|
52
|
+
|
53
|
+
Rubyのように、クラスベースであっても、宣言した際に、クラスオブジェクトとして扱える言語はいくつか存在していますが、
|
54
|
+
|
51
|
-
|
55
|
+
多くのクラスベース言語では、スタティックなプロパティやメソッドがない場合は、インスタンス化をしないと、
|
56
|
+
|
57
|
+
基本的には、プロパティにアクセスや、メソッドを実行などのインスタンスオブジェクト的扱いをすることができません。
|