这是在Javascript / node.js中执行私有函数的正确方法吗?

我在node.js中编写的一个类如下所示:

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

我有一个function,我想成为私人。 为了理解这个函数是否在构造函数之外声明的,它本质上是一个静态函数,它不能引用this.myvariable。

是处理这个正确的方法来在这样的构造函数中声明函数:

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

或者有没有更好的方法来做到这一点,不会给我一个潜在的巨大的构造函数?

编辑:它看起来像我误解了这里的东西,因为上述代码甚至不工作…

拥有一个私有函数的最简单方法就是在类之外声明一个函数。 原型函数仍然可以很好地引用它,并将this作用域传递给.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() 

是的,你可以做一个私人的方法,但它不能成为原型的一部分

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

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

 function ClassA() { function MyFunction() { //your logic } } 

我希望访问这个链接 ,将描述你的每一口井。

其实在javascript中没有class。
看一个json对象的构造函数:

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

那么你使用new来创build一个ClassA:

 var a=new ClassA(); 

你可以使用publicFunction,但是你不能使用私有函数。

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

对你有帮助吗?

无论你将不添加到module.exports将是私人的module ,不能从模块外部访问。 在控制器内部也将这个参考存储到局部variables中

 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 ,validation将是私人的。

你可以看到道格拉斯·克罗克福德私人成员的风格。 http://javascript.crockford.com/private.html