我目前正在深入研究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()
。
我的问题 - 有没有一种更优雅的方式来使用我尚未发现的Spine?
答案 0 :(得分:0)
简而言之,除了闭包之外,没有办法让全局范围内的某些函数/变量不可见/私有。
答案 1 :(得分:0)
没有
“私人”功能不存在。您只有本地函数和闭包状态。对状态使用局部函数/变量和闭包与使用原型继承不能很好地混合使用。
你应该问的真正问题是“为什么你需要私人功能”,因为你没有。
如果某个函数不稳定且不应该使用,因为API可能会更改,只需将其添加到_
var PrinterManager = {
...
_instantiateActiveX: function() {
...
}
}
如果有人使用这些内部函数或变量,那么如果您更改代码,他们无权投诉。