javascriptのnew演算子(コントラスタとインスタンス)はどんなときに役立ちますか?
function Member1とfunction Member2を比較した場合
<script type="text/javascript">
function Member1 (firstName, lastName) {
return lastName + " " + firstName;
}
document.writeln(Member1('氏名', '名字')); // 「名字 氏名」と表示
//ここより下は参考書より
var Member2 = function(firstName, lastName){
// thisはコンストラクタによって生成されるインスタンスを表す
//this.プロパティ名 = 値;として記述する
this.firstName = firstName; //firstNameというプロパティを生成
this.lastName = lastName; //lastNameというプロパティを生成
this.getName = function(){
return this.lastName + " " + this.firstName;
}
};
var mem = new Member2('氏名', '名字'); //オブジェクトの初期化
document.writeln(mem.getName()); // 「名字 氏名」と表示
</script>
function Member1のような通常の方法でできることを、
なぜfunction Member2のようにnew演算子を使うのか、
そうすることで、どんなメリット・便利さがあるのかと思いました。
いろいろ調べたのですが解決できず、ご教示を頂こうと思いました。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
大雑把に言うと、「これでひとまとまりのデータとそのデータに対する処理をまとめて扱えるから」です。
この例で言うと、たとえば
鈴木 太郎
菊池 武
というような表示を、変数に入れた値を使って行う場合
Member1:
var suzuki_family = '鈴木';
var suzuki_first = '太郎';
var kikuchi_family = '菊池';
var kikuchi_first = '武';
document.writeln(Member1(suzuki_family, suzuki_first));
document.writeln(Member1(kikuchi_family, kikuchi_first));
Member2:
var suzuki = new Member2('鈴木', '太郎');
var kikuchi = new Member2('菊池', '武');
document.writeln(suzuki.getName());
document.writeln(kikuchi.getName());
となります。
Member1のほうは'鈴木'という値が入ったsuzuki_familyと'太郎'という値が入ったsuzuki_firstとは別の変数で、その関連を示すものは変数名だけです。それに対してMember2では'鈴木'という値と'太郎'という値がセットになっています。どちらが扱いやすいかは明らかにセットになっているMember2のほうです。
上のように短いプログラムだとその恩恵がピンと来ないかもしれませんが、ある程度以上の規模のプログラムだとこのように関連のあるデータをひとつにまとめる仕組みがないと混乱してきます。このあたりはオブジェクト指向を勉強して……と本当はいいたいのですが、はっきりいってその辺の勉強ははまると大変なので、「データをまとめて持っていられると楽になるよ、ついでにそのデータに関する操作はそのデータ自身にやらせようよ」くらいに考えておいてください。
No.2
- 回答日時:
<!DOCTYPE html>
<html lang="ja">
<title></title>
<meta charset="utf-8">
<body>
<ol>
<li>
<input type="text" value="0" id="A">
<input type="button" value="start" onclick="sw0.start()">
<input type="button" value="stop" onclick="sw0.stop()">
<input type="button" value="reset" onclick="sw0.reset()">
<li>
<input type="text" value="0" id="B">
<input type="button" value="start" onclick="sw1.start()">
<input type="button" value="stop" onclick="sw1.stop()">
<input type="button" value="reset" onclick="sw1.reset()">
<li>
<input type="text" value="0" id="C">
<input type="button" value="start" onclick="sw2.start()">
<input type="button" value="stop" onclick="sw2.stop()">
<input type="button" value="reset" onclick="sw2.reset()">
</ol>
<script>
/*
ストップウオッチをつくりたい。
まずおもいつくのは、ぼたんがあったな。
たしか、start と stop と reset 。
えきしょうでぃすぷれーもひつようだな。
すくりぷととしては、たいまーしょりがひつようで、それをかんりするidがひつようだな。
それと「じかん」もかぞえなきゃ~
*/
function Stopwatch (dispNode) {
this.disp = dispNode;
this.timerId = null;
this.count = 0;
this.reset ();
this.interval = 100; //ms
}
Stopwatch.prototype.reset = function () {
this.disp.value = this.count = 0;
}
Stopwatch.prototype.stop = function () {
(this.timerId) && clearInterval (this.timerId);
this.timerId = null;
}
Stopwatch.prototype.start = function () {
this.timerId || (this.timerId = setInterval (countup, this.interval, this));
}
function countup (that) {
that.disp.value = ++that.count;
}
var sw0 = new Stopwatch (document.getElementById('A'));
var sw1 = new Stopwatch (document.getElementById('B'));
var sw2 = new Stopwatch (document.getElementById('C'));
//おぶじぇくとしこうとやらでつくると、かんたんにたくさんつくれるじゃん!
//ieだとうごかないよ、たぶん?
//ぜんかくくうはくは、はんかくにしてね
//もっとさいぶんかしたほうが(じょうたいのへんかとしてとらえるには)よいのでしょうが・・・
</script>
具体的なサンプルを作って頂き有難うございます。
すいすい書けるようになるまで反復練習が必要ですが、
徐々に慣れていこうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onchangeイベントを強制的に発...
-
ボタンかリンクをクリックする...
-
SendKeys()が一番最後に実行さ...
-
テキストフィールド未入力の場...
-
javaScriptの変数をJavaの変数...
-
innerHTML内では改行は禁止?
-
JavaScriptでIE上のボタンクリック
-
onclickが動作しない
-
formのfileの値をhiddenでも持...
-
VB.NETで<Input>タグ、<text...
-
クリックさせたいが、click()が...
-
window.openで開いた子ウィンド...
-
Javascriptで'(シングルクォー...
-
開いた子ウィンドウにあるボタ...
-
フォームにて自動計算したい・・・
-
INPUTでデフォルト値(数...
-
JSPファイルにJavaScriptを埋め...
-
プルダウン 項目が多いので先頭...
-
<input>の選択肢をプルダウンメ...
-
TextBoxに半角数字以外を入れた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onchangeイベントを強制的に発...
-
JavascriptでDOM-based XSSの発...
-
onclickが動作しない
-
クリックさせたいが、click()が...
-
追加ボタンを押した際に ok ボ...
-
innerHTML内では改行は禁止?
-
ボタンかリンクをクリックする...
-
formのfileの値をhiddenでも持...
-
javaScriptの変数をJavaの変数...
-
JavaScriptのfileオブジェクト...
-
VB.NETで<Input>タグ、<text...
-
受け取ったパラメータが文字化け
-
JQueryでfunctionに引数としてI...
-
javascriptで作成されたテーブ...
-
jQueryで設定したイベントハン...
-
開いた子ウィンドウにあるボタ...
-
コードレビューをお願いします。
-
ボタンをクリックするとテキス...
-
BackSpaceしたい(QNo.2734284の...
-
URL 判定
おすすめ情報