下記内容はあるサイトのインスタンスについての説明文です。
画像は、自分なりに理解したものです。
(1)メモリ上には記憶場所(=ポインタ)はない
(2)var Aa = new Bb("13" , "smole");とscript内に追加されたことにより
メモリ上に記憶場所(=ポインタ)が作成され、
BbオブジェクトつまりBb("13" , "smole");がその記憶場所(=ポインタ)に入る
(3)そしてBb("13" , "smole");が入った
記憶場所(=ポインタ)にAaという名前を付ける。
考え方に間違いがあるでしょうか?
----------------------------------------------------
var Aa = new Bb("13" , "smole");
これは、BbクラスオブジェクトのBbコンストラクタをnew演算子を利用して起動しています。
new演算子は、メモリ上に記憶場所を確保して、Bbオブジェクトを作成した後、そのポインタを返す演算子です。
new演算子から返されたポインタは、Aaへ格納されます。この場合のAaをBbオブジェクトのインスタンスといいます。
また、new演算子でメモリ上に記憶場所を確保して作られたオブジェクトをインスタンスオブジェクトといいます。
つまり、
オブジェクト == インスタンスオブジェクト
で、
インスタンス != インスタンスオブジェクト
インスタンス != オブジェクト
です。
----------------------------------------------------
No.2ベストアンサー
- 回答日時:
> 考え方に間違いがあるでしょうか?
そもそも JavaScript に「ポインタ」はありません。「JavaScript はどういう言語」かという言語規格の話と、「JavaScript エンジンがどのように作られているか」という実装の話がごっちゃになっています。JavaScript オブジェクトがポインタとして実装されているかは、利用者には何の関係もないことです。
JavaScript におけるオブジェクトとは、プロパティの集合です。例えば、下のような変数があるとします。
var a = 1, b = 2, c = 3;
これらをひとまとめにしておくと便利、という時があります。そこで「オブジェクト」にくっつけてしまいます。
var o = { };
o.a = 1;
o.b = 2;
o.c = 3;
// または、var o = { a:1, b:2, c:3 }; と一気に書いても良い
こうすれば、a, b, c を持ち運ぶとき(例えば関数の引数・戻り値として)、o という 1 個のオブジェクトを受け渡しするだけで a, b, c も全部くっついてきます。このとき、a, b, c はオブジェクト o の「プロパティ」である、と言います。
プロパティには何でも代入できます。別のオブジェクトを代入しても構いません。
o.d = { x:4, y:5 };
o.d.x; // 4
o.d.y; // 5
JavaScript における「オブジェクト」は「プロパティ」を束ねるものです。それ以上でも以下でもありません。
---
JavaScript における new 演算子の役割は、ポインタ云々ではなく、プロトタイプチェーンをつなぐことです。ですが、そもそも「オブジェクトって何?」という段階で new を気にする必要などありません。まず、上に書いたオブジェクトの使い方に慣れて下さい。
> オブジェクト == インスタンスオブジェクト
> インスタンス != インスタンスオブジェクト
> インスタンス != オブジェクト
いいえ。JavaScript では、
オブジェクト=インスタンスオブジェクト=インスタンス
関数=関数オブジェクト=関数インスタンス=コンストラクタ=コンストラクタオブジェクト
です。ですから、JavaScript の理解すら覚束ない段階でオブジェクト指向の用語を振り回すのは、かえって JavaScript の理解を妨げると思います。
※ECMAScript 規格書ですら、「Array オブジェクト」が Array のインスタンスなのか、Array コンストラクタ自身(これは Function のインスタンスでもあり、Object のインスタンスでもあります)を指すのか曖昧です。だいたい、instanceof 演算子があるにもかかわらず、「インスタンス」の定義は ECMAScript 規格にありません。
No.1
- 回答日時:
ここらへんを見ています?
http://chaichan.web.infoseek.co.jp/src/javascnew …
>考え方に間違いがあるでしょうか?
まああっているかと。
> オブジェクト == インスタンスオブジェクト
> インスタンス != インスタンスオブジェクト
> インスタンス != オブジェクト
ちょいと意味不明かと。何を説明したいのでしょうか。
上記URLのだと、Number型とかの話が続きますが、ちょっと説明がおかしいというか不十分だと思います。
インスタンスだとかオブジェクトだとかの用語は、C++やJava、Smalltalkなど、別言語の用語と混用されたりするので、あんまり厳密にとらえないほうがよいかと。
逆に、さも厳密っぽいものとして使っちゃうと、世のプログラミング言語論者から、非常(非情)なる指摘を受けることになりかねないです。
厳密に覚えるなら、ECMaScriptの仕様書とかを読んだほうが良いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- 世界情勢 『 クラマトルスク駅ミサイル、 ウクライナ軍の自作自演 』? 3 2022/04/21 19:46
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/05/21 02:41
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- その他(自然科学) 論文のまとめに関して(小論文)添削お願いします。 6 2023/07/16 14:24
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで =EMBED("Acrobat Docu...
-
COMコンポーネントって何?
-
ワイルドカード<?>と型パラメー...
-
ビジュアルC++でボタンの有...
-
JSPのout.printについて
-
多人数のじゃんけんプログラム
-
JAVAからHTMLへ値を返す方法
-
bmp画像をjpegやpng画像に圧縮...
-
パワーポイントのVBAでテキスト...
-
VBAのWindowオブジェクトとWork...
-
VBからBATファイルを起動して戻...
-
戻り値がクラスオブジェクト
-
オブジェクトに値を保持させる...
-
C#でフォームのオブジェクト名...
-
エプソンVP-930のESC/Pの操作に...
-
Vbで通常使用するプリンターを...
-
ワードで画像をドロップすると...
-
Date型オブジェクトから日付の...
-
newは明示的にした方が良いのか?
-
Google Apps Scriptの時刻の計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
ワイルドカード<?>と型パラメー...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
LISTBOXの内容が更新されま...
-
Object型からDouble型へのキャスト
-
JAVAからHTMLへ値を返す方法
-
COMコンポーネントって何?
-
ビジュアルC++でボタンの有...
-
戻り値がクラスオブジェクト
-
VBA 同じ名前のオブジェクトを...
-
ASP.net 教えてください!!(...
-
Vbで通常使用するプリンターを...
-
newは明示的にした方が良いのか?
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
bmp画像をjpegやpng画像に圧縮...
-
Accessの連結・非連結オブジェ...
おすすめ情報