有人在我的工作中指出我已經公開了一個init()函數,並且我應該將其設爲私有。目前,我的功能看起來像init()函數公共實例與私有實例
that.init = function(){
//my Code
}
that.init();
從我迄今擡頭,這將是更好的聲明這樣說。請糾正我,如果我錯了
function init() {
//my code
}
init();
我想知道區別,在此先感謝。
有人在我的工作中指出我已經公開了一個init()函數,並且我應該將其設爲私有。目前,我的功能看起來像init()函數公共實例與私有實例
that.init = function(){
//my Code
}
that.init();
從我迄今擡頭,這將是更好的聲明這樣說。請糾正我,如果我錯了
function init() {
//my code
}
init();
我想知道區別,在此先感謝。
您有以下情況:
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一些建議。
感謝這個工作對我來說:) – Vijay
@Vijay不客氣。 –
從我的理解你的代碼是,你在angularjs
應用程序中使用controllerAs
語法。
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
謝謝Thalaivar :) – Vijay
看看封閉 – brk
你在初始化?你能提供完整的例子嗎? –
嗨@DmitriPavlutin我正在初始化一個$ http。致電 – Vijay