blog

javascriptのチェーン

チェーンプログラミングといえば、私は多くのフロントエンド開発者がjqueryのチェーン操作を考えるのを助けることができないと信じています。 多くの人が最も初期のチェーン操作に連絡し始めた、それはこの最...

Oct 13, 2020 · 3 min. read
シェア
この記事を読むには、JQの知識とJSの基本的なスキル、そしてプロトタイプの理解が必要です。


javascriptの連鎖プログラミングといえば、jqueryの連鎖操作を思い浮かべずにはいられないフロントエンド開発者も多いと思います。
多くの人が最初にチェインオペレーションを始めるのがここです。


コード例:

$(".box").height(200).width(200);
このコードでは、クラス名.boxを持つ要素の高さと幅を設定します。

コード例:

$(".box").height().width();
コード2の例を実行すると、次のような結果が得られます。
widthは関数ではありません。
明らかに、jqueryはこの幅のメソッドを持っています。


実際、JQの仕組みはだいたいこんな感じです:
//以下は、原則の説明である、非JQのソースコード
function $(){
 var obj =  ...
 return obj;
}
$.prototype.width = function(val){
 if(val){
 幅を変更する...
 return this; //関数が参照を持っている場合、操作が完了すると、JQオブジェクト自体に戻る。
 } else {
 return  ; //関数の参照がない場合は、幅を返す
 }
}
$.prototype.height = function(val){
 if(val){
 高さを変更する...
 return this; //関数が参照を持っている場合、操作が完了すると、JQオブジェクト自体に戻る。
 } else {
 return  ; //関数の参照がない場合は、高さを返す
 }
}


コード例1に戻り、プロセスを以下に示します:




コード2の例では、height()メソッドは要素の高さを取得しており、要素の高さを数値として返します。
番号に対してメソッドを呼び出すことはできないので、連鎖呼び出しは切れ、以下のような処理になります:

概要:

jqueryのチェーンプログラミングは、一般的に操作をセットするために使用されますが、操作を取得するためには使用できません。
連鎖呼び出しの核心は、関数が実行の最後にカレント・オブジェクトである thisを返すことです。


次に、javascriptを使って練習します。
function Person(){
 this.age=20;//デフォルト値は20である。;
}
 
 //年齢設定メソッドをプロトタイプ経由でPersonコンストラクタに追加する
 Person.prototype.setAge=function(num){
 this.age=num;
 }
 
 //Personコンストラクタにメソッドを追加し、プロトタイプから年齢を取得する。
 Person.prototype.getAge=function(){
 return this.age;
 }
チェーンコール
console.log(new Person().setAge(30).getAge()); // 
エラーメッセージ: getAge属性がありません
上の Person コンストラクタのコードを再度変更します;
 //年齢設定メソッドをプロトタイプ経由でPersonコンストラクタに追加する
 Person.prototype.setAge=function(num){
 this.age=num;
 return this;
 }
もう一度やってください。
 console.log(new Person().setAge(30).getAge()); //30


もう一度、要約すると

javascriptの連鎖プログラミングの中核は、thisを返すことです;
チェーンプログラミングの利点。
コードがシンプルでエレガントになります。
連鎖プログラミングの欠点。
(a)過度に長いチェーンは、操作が不明瞭になりやすく、維持が難しく、理解しにくい。






Read next

ダークモードを探る

はじめに\nAndroid 10でDarkModeが追加され、それを適応できるアプリがますます増えています。 実際、DarkModeはAndroid 6.0の開発者プレビューですでに利用可能でしたが、正式版から削除されたばかりです。\n\nダークモードを実装するための第一歩は

Oct 12, 2020 · 3 min read