回答編集履歴
3
Objectのインスタンスではなく、Functionのインスタンスであることを修正
answer
CHANGED
@@ -39,7 +39,7 @@
|
|
39
39
|
|
40
40
|
## 余談
|
41
41
|
クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス宣言をした際、それがそのままインスタンスオブジェクトとなるのが特徴です。
|
42
|
-
(クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、
|
42
|
+
(クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、`Funtion`プロトタイプのインスタンスとなる)
|
43
43
|
Rubyのように、クラスベースであっても、宣言した際に、クラスオブジェクトとして扱える言語はいくつか存在していますが、
|
44
44
|
多くのクラスベース言語では、スタティックなプロパティやメソッドがない場合は、インスタンス化をしないと、
|
45
45
|
基本的には、プロパティにアクセスや、メソッドを実行などのインスタンスオブジェクト的扱いをすることができません。
|
2
語弊がある箇所を修正
answer
CHANGED
@@ -1,9 +1,25 @@
|
|
1
|
-
何をもって、質問者さんが**オブジェクト**と
|
1
|
+
何をもって、質問者さんが**オブジェクト**と指しているかによりますが、
|
2
2
|
JavaScriptにおいては、
|
3
3
|
**プリミティブ値も厳密に言えばオブジェクト**です。
|
4
|
-
なぜなら、
|
4
|
+
~~なぜなら、
|
5
|
-
数値も、文字列も、論理値なども、プロパティもメソッドも持ち合わせるからです。
|
5
|
+
数値も、文字列も、論理値なども、プロパティもメソッドも持ち合わせるからです。~~
|
6
|
+
↑すみません、語弊がありました。
|
7
|
+
確かにメソッドを実行することはできますが、
|
8
|
+
あくまで、値であり、宣言以降は、値自体は不変です。
|
9
|
+
例えば、下記のようにした際、
|
10
|
+
```javascript
|
11
|
+
let str = 'hoge';
|
12
|
+
str.replace('h', '');
|
13
|
+
console.log(str); // hoge
|
14
|
+
```
|
15
|
+
となり、値自体は不変です。
|
16
|
+
(`str = str.replace('h', '');`と、再代入した場合は、当然値が変わる)
|
6
17
|
|
18
|
+
ただし、これは、**JavaScriptにおけるオブジェクトデータ型ではない**、ということです。
|
19
|
+
値を返すメソッドを実行できる時点で、
|
20
|
+
**オブジェクト指向においてのオブジェクトとは言える**ということです。
|
21
|
+
(なので、質問者さんが何を持ってオブジェクトと指しているかによる、と前段の記載になりました)
|
22
|
+
|
7
23
|
> クラスの概念というものは無いにも関わらず「オブジェクト」という言葉が出てきて、
|
8
24
|
|
9
25
|
クラスという概念はありませんが、
|
1
語弊がある回答となっていたので、修正
answer
CHANGED
@@ -21,6 +21,9 @@
|
|
21
21
|
クラスを使う言語は、
|
22
22
|
**クラスベースのオブジェクト指向言語**というくくりになります。
|
23
23
|
|
24
|
+
## 余談
|
24
|
-
|
25
|
+
クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス宣言をした際、それがそのままインスタンスオブジェクトとなるのが特徴です。
|
25
|
-
|
26
|
+
(クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、本質的にはObjectプロトタイプのインスタンスとなる)
|
27
|
+
Rubyのように、クラスベースであっても、宣言した際に、クラスオブジェクトとして扱える言語はいくつか存在していますが、
|
26
|
-
|
28
|
+
多くのクラスベース言語では、スタティックなプロパティやメソッドがない場合は、インスタンス化をしないと、
|
29
|
+
基本的には、プロパティにアクセスや、メソッドを実行などのインスタンスオブジェクト的扱いをすることができません。
|