2016-03-14 51 views
0

有人在我的工作中指出我已經公開了一個init()函數,並且我應該將其設爲私有。目前,我的功能看起來像init()函數公共實例與私有實例

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

從我迄今擡頭,這將是更好的聲明這樣說。請糾正我,如果我錯了

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

我想知道區別,在此先感謝。

+0

看看封閉 – brk

+1

你在初始化?你能提供完整的例子嗎? –

+0

嗨@DmitriPavlutin我正在初始化一個$ http。致電 – Vijay

回答

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 contextAngular style guide一些建議。

+0

感謝這個工作對我來說:) – Vijay

+0

@Vijay不客氣。 –

0

從我的理解你的代碼是,你在angularjs應用程序中使用controllerAs語法。

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

+0

謝謝Thalaivar :) – Vijay