2015-09-11 37 views
1

類我在node.js中寫爲如下:這是在Javascript/node.js中執行私有函數的正確方法嗎?

module.exports = exports = function(){ return new ClassA() }; 

function ClassA(){ 
    this.myvariable = 0; 
} 

我有,我想成爲私人的功能。據我瞭解,如果該函數是在構造函數之外聲明的,它將基本上是一個靜態函數,它將無法引用this.myvariable。

與此處理像這樣在構造函數中聲明函數的正確方法:

//within constructor 
this.myFunction = function myFunction(){ 
    console.log(this.myvariable) 
} 

還是有做不留下我一個潛在的巨大構造更好的辦法?

編輯:它看起來像我誤解的東西在這裏,因爲上面的代碼甚至不工作...

回答

3

擁有私有函數的最簡單方法是在類之外聲明一個函數。原型功能仍然可以參考它完美的罰款,並通過他們範圍與.call()

function privateFunction() { 
    console.log(this.variable) 
} 

var MyClass = function() { 
    this.variable = 1; 
} 

MyClass.prototype.publicMethod = function() { 
    privateFunction.call(this); 
} 

var x = new MyClass(); 
x.publicMethod() 
0

不管你會不會增加module.exports私會爲module,不能從訪問在模塊之外。 另外控制器商店內的this參考到一個局部變量

var self = this; 

可以使用暴露模塊圖案。

var myNameSpace = function() { 
    var current = null; 
    function init() { 
     … 
    } 
    function change() { 
     … 
    } 
    function verify() { 
     … 
    } 
    return{ 
     init:init, 
     change:change 
    } 
}(); 
module.exports = exports = myNameSpace; 

這樣initchangepublic並確認將是私有的。

你可以看到道格拉斯克羅克福德私人成員的風格。 http://javascript.crockford.com/private.html

1

是你可以做一個私有方法,但它不能是原型的一部分

function ClassA() 
{ 
    var myvariable; 

    var private = function() // This is private method 
    { 
     myvariable = 0; 
    } 

    this.public = function() // This is public method 
    { 
     private(); 
    } 
} 
0

的Javascript 公共職能

ClassA.prototype.myFunction = function (string) { 
    //your logic 
} 

另一種類型的公共職能

function ClassA(){ 
    this.myvariable = 0; 

    var MyFunction3 = function() { 
     //your logic 
    }; 
    this.MyFunction2 = function() { 
     //your logic 
    }; 
} 

JavaScript的專用功能

function ClassA() { 

    function MyFunction() { 
     //your logic 
    } 
} 

我想喜歡來this link將描述你每口井。

0

事實上,在javascript中沒有class。
看一個JSON對象構造:

var ClassA=function() { 
    this.publicFunction=function(){ 
     console.log("public function"); 
    } 
    function privateFunction(){ 
     console.log("private function"); 
    } 
    return this; 
} 

然後使用新創建ClassA的:

var a=new ClassA(); 

可以使用publicFunction,但像它是私有的,你不能使用privateFunction。

a.publicFunction(); 
a.privateFunction();//you can't do this 

對你有幫助嗎?

相關問題