我流Javascriptの書き方、ライブラリ関数群の書き方(中級を目指す初心者用)

2021年7月26日

Javascript テクノロジー

eyecatch とにかく、Javascriptが肌に合う、ユゲタです。 自分用のライブラリは、もはや100本は軽く超えて作っていると思うんだけど、 最近でも半年に1回ぐらい、自分のコーディングルールが更新されています。 もはやclassも使えるJavascriptなんですが、できれば、下位互換も重要視したいので、 なるべく使わないようにしているんですが、きっとそっちにメリットを感じたら、 一気に方向転換してしまうんだろうな・・・ 今回は、自分ライブラリを作る時のjavascriptの標準的な(自分的に)書き方をブログに残しておきます。 そして、Javascriptプログラミング学習者の人も少しは参考になるかと思います。

関数を覚えたての時のライブラリ関数の書き方

まず、Javascriptのプログラミングを学習し始めた時に、関数を覚えた時に、次のように書きます。 <script type="module"> function lib(data){ console.log(data); } lib("data-view"); </script> 非常に簡単な、単に文字列をコンソールに表示するだけの関数ですが、グローバル領域にfunctionを定義するだけの、 至ってシンプルな書き方です。 お手本というか、マニュアルどおりですね。

変数に関数を格納する書き方

次にjavascript独特の関数を変数保持方式の関数の書き方で、これが理解できると、連想配列内に、関数を仕込んだりして、 少し効率的な構造体を作ることができます。 <script type="module"> var lib = (function(data){ console.log(data); }); lib("data-view"); </script>

無名関数を覚えたてでのライブラリ関数の書き方

グローバルの変数や定数を汚さないための書き方は、次のようにします。 <script type="module"> (function(){ function lib(data){ console.log(data); } lib("data-view"); })(); lib("data-view"); </script> functionがいくつか並んでいて、わかりにくい人もいるかもしれませんが、これが読めたら、javascript初級者からは抜けられるでしょう。 ちなみに、一番下の行のlib関数実行はエラーがでます。 無名関数内での関数や変数定義は、ちゃんとスコープ処理されて、そのスコープの外には影響されなくなります。 ポイントは、無名関数の後ろに()を書くと、その無名関数を即時実行してくれるようになるので、この書き方は慣れておいたほうがいいでしょう。

インスタンスを覚えた人の書き方

次に関数をインスタンスで実行するという方式を覚えると、「ガベージコレクション」という言葉を耳にし始めます。 ※ガベージコレクションについては、今回は説明しません。 <script type="module"> (function(){ function lib(data){ this.str = data; } lib.prototype.view = function(data2){ console.log(this.str +"/"+ data2); }; new lib("a").view("b"); })(); </script> 関数のprototypeという属性を覚えると、thisを便利に使えたり、色々なデータを継承することができ、 慣れると、大きなシステムでも対応できるので、この方式は、是非、覚えておきたい!!

起動関数のみで、処理したいと思った時のスニペット

そして、今現在の自分の最終形のライブラリ関数の作り方が、 <script type="module"> (function(){ function lib(){ let mode = "", args = []; for(let i=0; i<arguments.length; i++){ if(i===0){ mode = arguments[i]; } else{ args.push(arguments[i]); } } if(!mode){return;} if(this[mode] === undefined){return;} return this[mode].apply(this , args); } lib.prototype.view = function(data){ console.log(data); }; new lib("view" , "test-view"); })(); </script> libという関数のviewというpropertyに、new lib("view")という起動方法でアクセスできるようにする方法です。 ポイントは、function libの定義は、あくまでlibというクラスのような定義をする意味にして、その中で、 argumentsという、引数を配列で取得できる方式で、1つ目の変数を、下層に存在する、子関数名を定義して、 その後ろを、それぞれの送り値とする方式です。 ほとんどのライブラリが、この方式で、効率的に動作できるようになりました。 またcookieを便利に書いたり読んだりする関数を作るときには、function定義する時に、cookie名を、初期関数定義内で、this.nameのように持つとかなり便利にできるので、 その際は少し内容を変える必要がありますけど、この応用で、ほぼなんでもイケます。 こうした自分にとって便利な関数を作りためていくと、ホームページ制作も、人よりも何倍も早くなるかもね・・・ いや、ソレは自分次第・・・

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ