有人在我的工作中指出我已经公开了一个init()函数,并且我应该将它设为私有。目前我的功能看起来像
that.init = function(){
//my Code
}
that.init();
从我到目前为止看到的情况来看,以这种方式宣布它会更好。如果我错了,请纠正我
function init() {
//my code
}
init();
我想知道其中的差异,先谢谢。
答案 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
。当您希望将其添加到视图中时,您可以将附加内容附加到$scope
或vm
,而使用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