最优雅的方式在Spine中定义私有“类”函数

时间:2011-08-10 09:18:51

标签: javascript spine.js

我目前正在深入研究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?

2 个答案:

答案 0 :(得分:0)

简而言之,除了闭包之外,没有办法让全局范围内的某些函数/变量不可见/私有。

答案 1 :(得分:0)

没有

“私人”功能不存在。您只有本地函数和闭包状态。对状态使用局部函数/变量和闭包与使用原型继承不能很好地混合使用。

你应该问的真正问题是“为什么你需要私人功能”,因为你没有。

如果某个函数不稳定且不应该使用,因为API可能会更改,只需将其添加到_

之前
var PrinterManager = {
   ...
   _instantiateActiveX: function() { 
       ...
   }
}

如果有人使用这些内部函数或变量,那么如果您更改代码,他们无权投诉。