ユーザ定義のコンストラクタ関数を作る場合
当サイトのリニューアル作業に時間をあてるため、掲示板の投稿は当分停止させていただきます。
ユーザ定義のコンストラクタ関数を作る場合
Functionオブジェクト(関数)を作る場合はprototypeを使ってコンストラクタにメソッドを追加しますが
以下コードの1番の書き方は何かマズイのでしょうか?
コードで表すと
1番と2番どちらを使う方が良いですか?
1、
var Add = function(num1, num2) {
this.num1 = num1;
this.num2 = num2;
this.getNum = num1 + num2;
}
2、
var Add = function(num1, num2) {
this.num1 = num1;
this.num2 = num2;
}
Add.prototype.getNum = function() {return this.num1 + this.num2};
1番のgetNumの書き方は、ひょっとして関数を作っていますか?
Functionオブジェクト(関数)を作る場合はprototypeを使ってコンストラクタにメソッドを追加しますが
以下コードの1番の書き方は何かマズイのでしょうか?
コードで表すと
1番と2番どちらを使う方が良いですか?
1、
var Add = function(num1, num2) {
this.num1 = num1;
this.num2 = num2;
this.getNum = num1 + num2;
}
2、
var Add = function(num1, num2) {
this.num1 = num1;
this.num2 = num2;
}
Add.prototype.getNum = function() {return this.num1 + this.num2};
1番のgetNumの書き方は、ひょっとして関数を作っていますか?
さいとう さん
12月07日 09時35分
さいとうさん、こんにちは。
私は普段PHPばかりで、ここ数年はJavaScriptはjQuery関連以外ほとんど書かなくなってしまったので忘れかかってますが、その上で僭越ながら回答させていただきます。
1がマズイかマズくないかで言えば、用途次第ではないでしょうか。
Addやnum1,num2という変数名からして、数値の和を求めるクラス的なものにされたいのですよね。
コンストラクタで指定した数字のみで和を求めるだけと仮定すれば、1でも機能的には満たしています。ですので、まずくないです。
ただ、num1とnum2の数値が後から変わる予定があったり、Addクラスをもっと拡張したい場合、柔軟性があるのは2のような書き方ではないでしょうか。
少なくとも、1と2どちらの書き方でも、期待するような結果を返すよう動作させること自体は問題無いと思います。
ですので良いか悪いかというのは一概に言えず、コード全体からみたAddの役割・求める仕様の上で、変わってくるのではないでしょうか。
これはどういった意味合いでしょう?
読解力が至らなく、ごめんなさいm(__)m
繰り返しますが、私はPHPerで、JavaScriptで専門的な開発はしない人ですから、もし参考にならなかったら申し訳ないです。
私は普段PHPばかりで、ここ数年はJavaScriptはjQuery関連以外ほとんど書かなくなってしまったので忘れかかってますが、その上で僭越ながら回答させていただきます。
1がマズイかマズくないかで言えば、用途次第ではないでしょうか。
Addやnum1,num2という変数名からして、数値の和を求めるクラス的なものにされたいのですよね。
コンストラクタで指定した数字のみで和を求めるだけと仮定すれば、1でも機能的には満たしています。ですので、まずくないです。
ただ、num1とnum2の数値が後から変わる予定があったり、Addクラスをもっと拡張したい場合、柔軟性があるのは2のような書き方ではないでしょうか。
少なくとも、1と2どちらの書き方でも、期待するような結果を返すよう動作させること自体は問題無いと思います。
ですので良いか悪いかというのは一概に言えず、コード全体からみたAddの役割・求める仕様の上で、変わってくるのではないでしょうか。
> 1番のgetNumの書き方は、ひょっとして関数を作っていますか?
これはどういった意味合いでしょう?
読解力が至らなく、ごめんなさいm(__)m
繰り返しますが、私はPHPerで、JavaScriptで専門的な開発はしない人ですから、もし参考にならなかったら申し訳ないです。
馬場誠 さん
12月07日 17時09分
馬場誠 さん。回答ありがとうございます。
なるほど。まずくないといった事なので1の場合も書いていこうと思います。
なぜこのような質問をしたかというと、
var Add = function(num1, num2) {
this.num1 = num1;
this.num2 = num2;
this.getNum = function() {return num1 + num2;}
};
この書き方を行った場合、実際に使用する際にはnewして使うのですが
var num1 = new Add(1, 1);
console.log(num1.getNum());
newした際にfunctionオブジェクトも生成してしまってnewする毎に関数が作られるのでprototypeの方がいいですよ、と聞いたのでfunctionを使う場合と、使わなければいいのかな?という意味で質問しました。
自分でもわけがわからない質問です^^;すみません忘れてください。
ありがとうございました。
なるほど。まずくないといった事なので1の場合も書いていこうと思います。
なぜこのような質問をしたかというと、
var Add = function(num1, num2) {
this.num1 = num1;
this.num2 = num2;
this.getNum = function() {return num1 + num2;}
};
この書き方を行った場合、実際に使用する際にはnewして使うのですが
var num1 = new Add(1, 1);
console.log(num1.getNum());
newした際にfunctionオブジェクトも生成してしまってnewする毎に関数が作られるのでprototypeの方がいいですよ、と聞いたのでfunctionを使う場合と、使わなければいいのかな?という意味で質問しました。
> 1番のgetNumの書き方は、ひょっとして関数を作っていますか?
自分でもわけがわからない質問です^^;すみません忘れてください。
ありがとうございました。
さいとう さん
12月07日 21時04分
さいとうさん、こんにちは。
なるほど、
という用途で、おっしゃるような疑問が私も理解できました(とは言え、残念ながら論理的にご説明できる回答を持っておりませんが)。
私のような零細事業者には、体感で分かる速度の遅延が見られなければ、動作すれば&制作費が安ければヨシ・という案件しかこないので、気になっても調査したことはありませんでした。
一度、速度を計測するスクリプトで実験されてみるのもいいかもしれませんね。
私よりも高いレベルで試行錯誤されていらっしゃるので、私などではお役に立てず申し訳ありません。
なるほど、
> this.getNum = function() {return num1 + num2;}
という用途で、おっしゃるような疑問が私も理解できました(とは言え、残念ながら論理的にご説明できる回答を持っておりませんが)。
私のような零細事業者には、体感で分かる速度の遅延が見られなければ、動作すれば&制作費が安ければヨシ・という案件しかこないので、気になっても調査したことはありませんでした。
一度、速度を計測するスクリプトで実験されてみるのもいいかもしれませんね。
私よりも高いレベルで試行錯誤されていらっしゃるので、私などではお役に立てず申し訳ありません。
馬場誠 さん
12月08日 14時43分