JavaScriptの配列継承の簡単な例

1341 ワード

いくつかのライブラリを書くときは、ツリー構造のデータがよく使われます.また、ルートからリーフへの経路取得には、ツリー構造のデータが非常に高い必要があります.例えば、あるサイトの全ルートテーブルはこのような木です.その「経路」は実はURLの中のパス部分です.ですから、私は何度も狂気の行列を使って実現しました.JavaScriptでは、配列もObjectの一種であり、継承も可能である.いずれのオブジェクトも相続関係があります.配列も例外ではありません.そこで、私たちはツリーの任意のノードを配列にして、自分の下に最大の要素の値を表示します.他の要素の値は、プロトタイプ継承によって祖先ノードから継承される.このように、我々は、動作の一般的な配列のように、ルートノードからの経路にアクセスすることができる.以下は簡易実現です.運行します.


//      
var TNode = function(value) {
 this.push(value);
};
TNode.prototype = [];
TNode.prototype.constructor = TNode;
TNode.prototype.createChild = function(value) {
 var node = Object.create(this);
 TNode.call(node, value);
 return node;
};

//             
var root = new TNode('root');
var a = root.createChild('a');
var b = a.createChild('b');

//         ,      
document.write(b.join('/')); <!-- root/a/b


この使い方は黒の魔法ですが、原型継承の原理が分からないと分かりにくいかもしれません.ですから、一つの倉庫として実現すれば、このように書いてもいいかもしれません.(何回も使ったことがありますが、事実証明は穴がありません.)、直接業務コードの中で使うと死ぬまで突っ込まれるかもしれません.この使い方はJavaScriptという言葉の核心思想に反するものではないですが.この使い方の特徴の一つは、祖先ノードの値が更新されると、自動的にすべてのサブノードに同期されるということです.プロトタイプチェーンのアクセスも性能オーバーヘッドがありますが、コード層自身で木を遍歴するよりはずっと速いです.もちろんこのような需要がないなら、単純な数を実現したいだけです.伝統的な方法を使ったほうがいいです.言葉に頼りすぎて、後で他のプログラミング言語に移るのは難しいかもしれません.