『確かな力が身につくJavascript「超」入門』という本で、
例に、DateオブジェクトやMathオブジェクト、windowオブジェクト、documentオブジェクトが出てきていて、
Dateオブジェクトは「複数作れる」から初期化して、
その他3つのオブジェクトは複数作れないから初期化しないと書かれていました。
何度も読み返したのですが理解できません。
どういうことなんでしょうか?
どなたか教えていただけると嬉しいです。。。
よろしくお願いします!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア18162
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総合スコア2004
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/30 07:21
0
状態を持つクラスと状態を持たないクラスの2パターンがあります。
newをつける場合は状態を持つ場合、newをつけない場合は状態を持たない場合ということです。
では状態を持つというのはなにかというと、たとえば車クラスを考えてください、車は一台一台がナンバーとガソリン量が違ってきます。この場合は車一台一台が状態を持つ必要があるんです。なのでnewが必要です。
ではMathのようにnewしないものは状態を持たないということになります。
Mathは数学的なクラスですが、パラメータを渡して結果を受け取るだけで状態を持つ必要がないのです。
たとえばMathクラスには平方根を求めるSQRT2メソッドがありますが、これは引数に2を渡すと1.4142・・・が返ります。このように処理だけして戻り値で答えをかえすだけで、今の答えをMathクラスで保持する必要がない場合です。わかりますか?平方根の答えをMathが持ってても仕方ないです。もう使わないし。って考え方です。
window,documentオブジェクトについてはjavascriptで特殊な意味があります。これらはその他組み込みクラスと一緒には考えずに例外と見たほうがいいと思います。
投稿2015/11/23 15:19
総合スコア590
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/30 05:38