私は現在Spineに潜入しています。私は現在、Spineのクラス作成メソッドを使ってプライベート関数を定義する最もエレガントな方法を尋ねています。Spineのプライベート "クラス"関数を定義するもっともエレガントな方法
var PrinterManager = Spine.Class.create({
init: function() {
},
getAllAvailablePrinters: function() {
},
printDocument: function() {
}
});
(function() {
var instantiateActiveX = function(){
console.log("...");
}
PrinterManager.include({
pubInitActiveXPrinter: function(){
instantiateActiveX();
}
});
})();
あなたは私がinstantiateActiveX
はプライベートと外から見えないようにしたい見ることができるように。 JavaScriptのクロージャー機能のトリックを使用すると、私は問題なくプライベートにすることができますが、このソリューションはSpineのようなクラスを作成するコンテストではあまりにもエレガントではないようです。
コードは動作します。つまり、私はPrinterManager.init().pubInitActiveXPrinter()
に電話をかけ、内部でプライベート機能を呼び出し、正しく - PrinterManager.init().instantiateActiveX()
に電話をかけることができません。
私の質問 - 私はまだ発見していないスパインでそれを行うよりエレガントな方法はありますか?
確かに、プライベートスコープを "エミュレート"するにはJavaScriptで閉じる必要があります。それは明らかです。私の反対はSpineに関するものでした。著者は純粋な従来の仕組みに頼っているようですが、それはプライベートスコープをエミュレートするほど安全ではないかもしれません。上記の仕組みは "instantiateActiveX()"が "public"ではないので完全に機能しますが、それを統合するのはかなり面倒です... – Juri
クロージャを使用する以外にプライベートとして宣言する方法がないことは明らかです。あなたの質問に対する答えは1つだけです。もちろん、他の関数を宣言することができる十数の方法がありますが、実際の機能変更よりもマークアップの方が重要です。何がエレガントなものに見えるかは、誰かにとって必ずしもエレガントではない。 – WTK