質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

7220閲覧

「オブジェクトには初期化するものとしないものがある」ということの意味が理解できません、、、

ShunYoshizawa

総合スコア103

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

0クリップ

投稿2015/11/23 14:54

『確かな力が身につくJavascript「超」入門』という本で、

例に、DateオブジェクトやMathオブジェクト、windowオブジェクト、documentオブジェクトが出てきていて、

Dateオブジェクトは「複数作れる」から初期化して、

その他3つのオブジェクトは複数作れないから初期化しないと書かれていました。

何度も読み返したのですが理解できません。

どういうことなんでしょうか?

どなたか教えていただけると嬉しいです。。。

よろしくお願いします!

nnahito👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

プロトタイプ(Date) を基にしたインスタンス(new Date)を作れる事を「初期化するもの」と表しているものと思われます。

JavaScript

1var d = new Date; 2console.log(d instanceof Date); // true 3 4new Window; // TypeError: Illegal constructor 5new Document; // TypeError: Illegal constructor 6new HTMLDocument; // TypeError: Illegal constructor

最も、document に関しては createHTMLDocument, createDocument, DOMParser 等が存在する為、インスタンスを作れないわけではありません。
window に関しても Object.create() を利用すればインスタンスを生成可能です。

JavaScript

1var win = Object.create(Window.prototype); 2console.log(win instanceof Window);

おそらく、『確かな力が身につくJavascript「超」入門』のいうところの「初期化するもの」は「new 演算子でインスタンスを生成できるもの」なのでしょう。
「初期化する」にそういう意味合いはないので参考書としてはちょっとわかりづらいかなと思います。

投稿2015/11/23 15:32

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShunYoshizawa

2015/11/30 05:38

回答ありがとうございます。 いろいろな参考書などを見ながら勉強していきたいと思います! ありがとうございました!
guest

0

ベストアンサー

またもやざっくりした回答を.
私はオブジェクト指向というものが苦手なので,こういう書き方は苦手ですが……

コンストラクタ」というものが有ります.
簡単に言うと「初期値」を指定できるものです.

コンストラクタには,

  • 初期値が必須でないもの
  • 初期値が必須なもの
  • 初期値がないもの

があります.

JavaScript(以下,JSと表記)では,new演算子と言うものでオブジェクトを作成します.
それと同時に初期値を指定します.


new Date(); //初期値なし
new Date( "2013/1/23" ); //初期値あり

上記の例では,
「初期値なし」の場合は,現在の時刻や曜日,年月
「初期値有り」の場合は,2013年1月23日の0時0分0秒の曜日や年月
が返って来ます.

このようにDate()は,初期値によって返ってくる値が変わってしまうため,初期化(初期値の再代入)を行わないといけないわけですね.

ここ,結論!

Date()も,別に初期化しなくとも使えます.
試しにdocument.write(Date())とやってみてください.
ね,表示されたでしょう?


追記(戯れ言)

なんとなくではありますが,質問者様の使われている本は,質問者様に合っていない気もします(違っていたらごめんなさい).
参考書は数多くありますので,もっとわかりやすく書いてある物を探してみてはいかがでしょうか?

私も最初独学ではじめ,数年間必死こいて勉強しました.
当時,このような質問サイトはなく,泣きながら勉強するしかありませんでした.(解説サイトも専門用語だし,教えてg●●とかも専門用語で返ってくるし……)
今思い返せば,もっと参考書を買ってイイトコどりをすればよかったなと後悔しています.
ま,そんなお金があったら実現していたと思うんですけどね(開き直り

ですが最近は解説サイトさんも増えていますし,本も電子書籍なんてのもあって充実している気がします.気がします.(大切なので二回言っておきます)

すこしその本から顔を上げてみてはいかがでしょう?

投稿2015/11/24 10:33

編集2015/11/24 10:58
nnahito

総合スコア2004

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShunYoshizawa

2015/11/30 05:43

回答ありがとうございます! このようにDate()は,初期値によって返ってくる値が変わってしまうため,初期化(初期値の再代入)を行わないといけないわけですね というところでだいぶ理解できました! ありがとうございます! ちなみに、、 追記のところでおっしゃっていただいた「参考書が合わないのでは?」ということで、回答者様お勧めの参考書などありましたら教えていただきたいです!
nnahito

2015/11/30 07:21

ベストアンサーありがとうございます. >追記のところでおっしゃっていただいた「参考書が合わないのでは?」ということで、回答者様お勧めの参考書などありましたら教えていただきたいです! さて,こちらについてなのですが,今度は無責任な回答を. 私のおすすめの参考書は「ありません」. 何故かといいますと,私の「わかりやすい」と質問者様の「わかりやすい」は別物だからです. 例えば,世界的な教科書とされている「o'reilly」をお勧め「した」としましょう. http://www.oreilly.co.jp/books/9784873115733/ ※私のおすすめではありません! この参考書を質問者様がわかりやすいと思うかどうかは,私にはわかりません. ちなみに私はこの本は大っっっっっっっっっっっっっっっっっ嫌いです. 文字しか無い!読みにくい!!専門用語多い!!! でも,めちゃくちゃ詳しく書いてあるんですよね. なのでおすすめの参考書はありませんが,参考書の探し方の案は提示できます. 2時間用意してください. そして大きな本屋さんに向かってください. プログラミング教本が陳列されているところの,JavaScriptコーナーに入ってください. そこから,本を数冊無造作に選びます. 本をパラパラとめくり,流し読みしてみてください. ポイントは「流し読み」です. 本の雰囲気がつかめると思います. その中から「自分に合う」と思った本を選んでください. 例:「図が多い」「言葉が優しい」「サンプルプログラムが多く載っている」「本の厚さが薄い」etc... 私は毎回この方法で参考書を選んでいます. そして質問者様の理解がどんどん進んでいった時, 私の回答が「実は間違い」だったことに気がついてください. あくまで「ざっくり」した回答ですので,厳密には違う部分があります. しかし,私を当時助けてくださった方々が口をそろえて「初心者はその認識でいいんだよ」という言葉が忘れられません. まずはイメージが大切なのです. もちろん全て間違いであるということではありませんし,この回答の認識でプログラミングを進めていっても問題は全くありません(笑) イメージしていただくためにワザと噛み砕いた表現をしています.
guest

0

状態を持つクラスと状態を持たないクラスの2パターンがあります。
newをつける場合は状態を持つ場合、newをつけない場合は状態を持たない場合ということです。
では状態を持つというのはなにかというと、たとえば車クラスを考えてください、車は一台一台がナンバーとガソリン量が違ってきます。この場合は車一台一台が状態を持つ必要があるんです。なのでnewが必要です。

ではMathのようにnewしないものは状態を持たないということになります。
Mathは数学的なクラスですが、パラメータを渡して結果を受け取るだけで状態を持つ必要がないのです。
たとえばMathクラスには平方根を求めるSQRT2メソッドがありますが、これは引数に2を渡すと1.4142・・・が返ります。このように処理だけして戻り値で答えをかえすだけで、今の答えをMathクラスで保持する必要がない場合です。わかりますか?平方根の答えをMathが持ってても仕方ないです。もう使わないし。って考え方です。

window,documentオブジェクトについてはjavascriptで特殊な意味があります。これらはその他組み込みクラスと一緒には考えずに例外と見たほうがいいと思います。

投稿2015/11/23 15:19

matsumoto

総合スコア590

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShunYoshizawa

2015/11/30 05:33

回答ありがとうございます! Mathは結果を受け取るだけということですっきりしました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問