我目前正在潜入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中使用闭包来“模拟”私有范围。这很清楚并给出。我的反对意见更多的是关于脊柱的问题,因为笔者似乎依赖纯粹的传统机制,这可能很好,但并不像模仿私人范围那样“安全”。虽然上面的机制完全可以像“instantiateActiveX()”不是“public”一样工作,但是集成起来非常麻烦...... – Juri
所以我们清楚地知道,除了使用闭包之外,没有办法声明私有事物,并且是你的问题的唯一答案。当然,有十几种方法可以在另一个中声明一个函数,但它的标记比实际的功能更改更重要。看起来优雅*对一个人来说,对别人来说不一定是优雅的。 – WTK