var Treasure = function(){
function locate(){
return this.x * this.y + 31337;
}
function Treasure(x, y){
this.x = x;
this.y = y;
}
Treasure.prototype.find = function find(){
return locate.call(this);
};
return Treasure;
}();
locate
コンストラクターとプロトタイプ メソッドの共有プライベート関数です。それを使用call
すると、メソッドのように機能し、 を利用できthis
ます。
この概念のより完全な実装は、インターフェイス オブジェクトと実装オブジェクトの実装です。メソッドとしてのいくつかのランダムな関数 (上記の場所と同様) を用意する代わりに、実際にはプライベートなクラス全体を作成します。インターフェイスを外部で作成するたびに、パブリック シェル インターフェイスとプライベート実装オブジェクトの 2 つのオブジェクトが作成されます。これにより、別の、おそらく使いやすい API を提供するインターフェイスをパブリックに公開できます。または、インターフェイス オブジェクトのグループ全体に対して単一のプライベート実装オブジェクトを再利用できるようにすることもできます。
これは実際にDOMが機能するように指定されている方法です(ただし、通常はjsでは実装されていません)。インターフェース オブジェクト (要素やノード オブジェクトなど) は、実際に単語を実行する基礎となる実装をラップするために特に必要です。公開されたオブジェクトは、プロパティ アクセスとメソッド呼び出しを転送するシェルにすぎません。
Dom.js は、js で作成された本格的な DOM 実装です。作業中に私が知った興味深い手法は、パブリック インターフェイスの完全に自動化された生成です。これが IDL の目的です。パブリック API は文字どおり自動的に生成され、プライベートな実装だけが実際に作成されます。これが実際に意味することは、人間に相談せずにこのようなものを作成できることです: https://github.com/Benvie/svgstuff/blob/master/lib/defs.js