イキってるわりに、得意分野で大怪我をすることが、たまにある、ユゲタです。
得意だと宣言していた、Javascriptの書き方で、
我流Javascriptの書き方、ライブラリ関数群の書き方(中級を目指す初心者用)
先日、こんなブログを書いていたんですが、
ここに書かれているインスタンス処理ですっかりと勘違いしていた事があったので、
合わせて情報としてお伝えしておきます。
Javascriptインスタンスのサンプル
まずはじめに、ブラウザコンソールで、次のプログラムを実行してみてください。
function test(a){
return "test : "+a;
}
test("hoge");
すると、"test : hoge"という文字列が返ってくると思います。
次に、prototypeを使って、objectデータが返ってくるインスタンスを実行してみると・・・
function test(a){
return this.a1(a);
}
test.prototype.a1 = function(a){
return {res : a};
};
new test("hoge");
{res: "hoge"}
というobjectデータが返ってきたはずです。
それでは、次のプログラムを実行すると、どうなるでしょう?
function test(a){
return this.a1(a);
}
test.prototype.a1 = function(a){
return "test : "+a;
};
new test("hoge");
> test {}
こんな感じの関数情報が返ってくるだけで、想像していたのは、文字列が返ってくるはずだったのですが、
想像した返答ではありませんでした。
Javascriptインスタンスの戻り値は、stringではなく、objectにすること
これは、インスタンスの戻り値は、objectにしないと、正常にreturnが返ってこないという事で、理解しなければいけないようです。
小さなスニペットなどでライブラリをクラスのように作りたいときに、
宣言したfunctionから、スマートに返り値をもらいたい場合に、この事を理解しておかないと、失敗に繋がる可能性がありますね。
ただし、返り値が正常でないだけで、内部処理は問題なく行われているので、get系ではない処理であれば、特に気にしなくてもいいかもしれません。
でも、戻り値の無い関数って、少し怖いので、「上位プログラマーの人は、必ず何かしらの返答を関数にはさせる」という話を聞いてから、
ボクのコーディングルールもそうするようにして安定したというのは、初心者の方へのアドバイスです。
ちなみに、object型以外の型は、インスタンスの戻り値としては、全て駄目なので、booleanもnumberもstringも駄目です。
こんな事を知らなかったために、半日費やしました
とあるシステムを作っていたときに、うっかりとインスタンスの戻り値を文字列で扱っていて、
その不具合の原因を追求して、今回のブログの内容に行き着きました。
思い込みと知らないという事は、仕事や、作業の進行をスムーズにできなくなるので、
それを回避するために、まだまだ学習を怠ってはいけないな〜と、改めて考えさせられた自分なりの気付きでした。
良いプログラミング学習を!
0 件のコメント:
コメントを投稿