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

时间:2015-09-11 05:00:41

标签: javascript node.js oop

我在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)
}

或者有没有更好的方法来做到这一点并没有让我留下潜在的巨大构造函数?

编辑:看起来我在这里误解了一些东西,因为上面的代码甚至无法正常工作......

4 个答案:

答案 0 :(得分:9)

拥有私有函数的最简单方法是在类之外声明一个函数。原型函数仍然可以完美地引用它,并将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()

答案 1 :(得分:1)

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,每个人都能形容你。

答案 2 :(得分:0)

事实上,javascript中没有类 查看json对象构造函数:

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

然后你用new来创建一个ClassA:

var a=new ClassA();

你可以使用publicFunction,但是你不能像使用privateFunction一样使用privateFunction。

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

对你有任何帮助吗?

答案 3 :(得分:0)

2019年5月17日更新

在ESnext(这是javascript的下一个规范)中,已添加了对私有方法和属性的支持:

要将属性或函数设为私有,请使用字符#

class Foo {
  #privateAttribute = 'hey';

  showPrivate() {
    console.log(this.#privateAttribute);
  }
}

曾在node.js v12 +中实现


您可以使用以下plugin

将babel配置为进行转译

它需要babel v7.0.0 +