init()函数公共实例与私有实例

时间:2016-03-14 12:11:51

标签: javascript angularjs

有人在我的工作中指出我已经公开了一个init()函数,并且我应该将它设为私有。目前我的功能看起来像

that.init = function(){
  //my Code
}
that.init();

从我到目前为止看到的情况来看,以这种方式宣布它会更好。如果我错了,请纠正我

function init() {
//my code
}
init();

我想知道其中的差异,先谢谢。

2 个答案:

答案 0 :(得分:0)

您有以下情况:

1)声明当前控制器范围内可用的函数:

app.controller('Ctrl', function() {

  function init() {
  //my code
  }
  init();

});

这样init()函数只能在控制器的函数范围内使用(不是Angular的$scope)。 init()是私密的。
init()仅在控制器中使用时,这是正确的方法。

2)将该函数声明为控制器的this上下文的属性

app.controller('Ctrl', function() {

  this.init = function() {
     //my code
  }
  this.init();

});

在这种情况下,任何有权访问控制器上下文this的代码都可以使用甚至修改this.init()函数。简单来说就是公开的 您稍后可以在视图中使用init(),例如:

<div ng-controller="Ctrl as ctrl">
   <button ng-click="ctrl.init()">Init me</button>
</div>

查看有关scopes and context的文章以及Angular style guide的一些建议。

答案 1 :(得分:0)

根据我对您的代码的理解,您在controllerAs应用程序中使用angularjs语法。

that.init = function(){
  //my Code
}
that.init();

此处that指向您的vm

function init() {
//my code
}
init();

两者都没有明显差异。我更喜欢后者,因为它没有附加到vm。当您希望将其添加到视图中时,您可以将附加内容附加到$scopevm,而使用function declaration附加内容。

javascript中的私有members/methods

function Vijay(){
    var myPrivateVar; // this is private

    var private_stuff = function()   // Only visible inside Restaurant()
    {
        myPrivateVar= "some value";
    }

    this.public= function()   // is visible to all
    {
        private_stuff();
    }

}

您可以在此处阅读有关私人会员/方法的更多信息: http://javascript.crockford.com/private.html