Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS服务写作风格_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS服务写作风格

Javascript AngularJS服务写作风格,javascript,angularjs,Javascript,Angularjs,以下是我在AngularJS中定义服务时使用的代码类型(示意图): .factory('MyService', function() { var prv = { // Private stuff I don't want to expose }; var pub = { // Public stuff - Will read & write prv above }; return pub; }) 正如

以下是我在AngularJS中定义服务时使用的代码类型(示意图):

.factory('MyService', function() {

    var prv = {
            // Private stuff I don't want to expose
    };

    var pub = {
        // Public stuff - Will read & write prv above
    };

    return pub;
})
正如您可能猜到的,目标是隔离服务需要使用的私有变量和函数,并且只返回公共部分(在我到目前为止看到的每个AngularJS示例中,工厂函数都返回一个对象,该对象既包含一些数据,也包含处理该数据的函数,这是不对的)

这工作得很好,到目前为止我从未遇到过任何问题,但我想知道:既然prv对象位于匿名函数内部,并且没有在该函数外部使用,那么它安全吗?或者它是否有被解释器中的垃圾收集或其他幕后过程破坏的风险


谢谢。

不,没有垃圾收集的风险,因为服务/工厂是一个单体,一旦创建,将在应用程序的生命周期内有效。此外,prv对象也没有真正的需要,因为在服务中创建的任何不属于返回对象的内容(在您的示例中为
pub
)本质上是私有的,因为它不是通过返回对象公开的

我的服务/工厂的结构通常如下:

.factory('MyService', function() {
    function doStuff(){doPrivateStuff();}
    function doPrivateStuff(){}

    return {
        doServiceStuff: doStuff
    };
});

谢谢你提供了非常有用的信息。