teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

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

2020/11/16 07:20

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -39,7 +39,7 @@
39
39
 
40
40
  ## 余談
41
41
  クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス宣言をした際、それがそのままインスタンスオブジェクトとなるのが特徴です。
42
- (クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、本質的にはObjectプロトタイプのインスタンスとなる)
42
+ (クラス宣言をした時点で、内部的には、プロトタイプ宣言なので、`Funtion`プロトタイプのインスタンスとなる)
43
43
  Rubyのように、クラスベースであっても、宣言した際に、クラスオブジェクトとして扱える言語はいくつか存在していますが、
44
44
  多くのクラスベース言語では、スタティックなプロパティやメソッドがない場合は、インスタンス化をしないと、
45
45
  基本的には、プロパティにアクセスや、メソッドを実行などのインスタンスオブジェクト的扱いをすることができません。

2

語弊がある箇所を修正

2020/11/16 07:20

投稿

miyabi_pudding
miyabi_pudding

スコア9559

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

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

2020/11/16 03:16

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -21,6 +21,9 @@
21
21
  クラスを使う言語は、
22
22
  **クラスベースのオブジェクト指向言語**というくくりになります。
23
23
 
24
+ ## 余談
24
- また、クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス宣言をした際、それが即時オブジェクトとなる
25
+ クラス構文をプロトタイプの糖衣としている、JavaScriptは、クラス宣言をした際、それがそのままインスタンスオブジェクトとなるのが特徴です。
25
- という点あくまで内部的にはプロトタイプなので)はクラベー言語は違った挙動をしますので、注意が必要です。
26
+ クラス宣言をした時点内部的にはプロトタイプ宣言なので、本質的にはObjectプロトタイプインタンスとなる)
27
+ Rubyのように、クラスベースであっても、宣言した際に、クラスオブジェクトとして扱える言語はいくつか存在していますが、
26
- クラスベース言語だとクラ宣言時にはスタティックなクラスであると示さないオブジェクト的使方はできないこがほとんど)
28
+ 多くのクラスベース言語では、スタティックなプロパティやメソッドがない場合はインスタンス化をしないと
29
+ 基本的には、プロパティにアクセスや、メソッドを実行などのインスタンスオブジェクト的扱いをすることができません。