Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何';隐藏&x27;公开公共静态方法时Javascript中的变量? 我目前正在使用JavaScript改写一些科学C++代码,如果可能的话,我希望保持相同的基本组织。在C++代码中,有许多类包含许多不同的数组中的一组代码> const < /C>数据,以及一系列用于处理该数据的公共静态< /代码>方法。我正在努力研究如何在Javascript中复制类似的内容_Javascript_Static Methods - Fatal编程技术网

我如何';隐藏&x27;公开公共静态方法时Javascript中的变量? 我目前正在使用JavaScript改写一些科学C++代码,如果可能的话,我希望保持相同的基本组织。在C++代码中,有许多类包含许多不同的数组中的一组代码> const < /C>数据,以及一系列用于处理该数据的公共静态< /代码>方法。我正在努力研究如何在Javascript中复制类似的内容

我如何';隐藏&x27;公开公共静态方法时Javascript中的变量? 我目前正在使用JavaScript改写一些科学C++代码,如果可能的话,我希望保持相同的基本组织。在C++代码中,有许多类包含许多不同的数组中的一组代码> const < /C>数据,以及一系列用于处理该数据的公共静态< /代码>方法。我正在努力研究如何在Javascript中复制类似的内容,javascript,static-methods,Javascript,Static Methods,目前,我正在使用以下内容: function mars(){} mars.x = [{A:1, B:2, C:3},{A:1, B:2, C:3}]; //... mars.y = [{A:1, B:4, C:2},{A:1, B:2, C:3}]; //... // ...about 600 lines in total mars.doSomething = function(foo){ var result = 0; // Do lots of processing of

目前,我正在使用以下内容:

function mars(){}

mars.x = [{A:1, B:2, C:3},{A:1, B:2, C:3}]; //...
mars.y = [{A:1, B:4, C:2},{A:1, B:2, C:3}]; //...
// ...about 600 lines in total

mars.doSomething = function(foo){
    var result = 0;
    // Do lots of processing of above arrays
    return result;
}

mars.doSomethingElse = function(bar){
    var result = 0;
    // Do lots of processing of above arrays
    return result;
}

console.log(mars.doSomething(3))
这是可行的,但它将
mars.x
等暴露给真正不需要了解它的其余代码。如果我使用
prototype
,方法将不再是静态的,代码中将充斥着
新的
调用,这是我真正不想要的


那么我要问的是:如何在JavaScript中隐藏变量,同时向代码的其余部分公开静态方法?或者我在担心我不应该成为的东西吗?

只需将其设置为局部变量,并使用getter函数来获取它们。此外,请尝试维护命名方案。对于构造函数,名称应该以大写字母开头

function Mars(){
   var x = [{A:1, B:2, C:3},{A:1, B:2, C:3}];
   this.getArr = function(){
       return x;
   }
}
var mars = new Mars();
mars.x; // undefined
mars.getArr(); // [Object, Object]

要隐藏变量,可以使用闭包(函数范围)


你担心这件事是对的。如果不解决此问题,代码将变得不可管理

您可以使用函数来控制JavaScript中的作用域。JS没有类。ES6(未被广泛使用)有“类”,但只是名副其实

您可以尝试以下方法:

var myApp = {};

(function(namespace){

  var X = [{A:1, B:2, C:3},{A:1, B:2, C:3}]; // Capitalized because 'constant'.
  var Y = [{A:1, B:4, C:2},{A:1, B:2, C:3}]; // Capitalized because 'constant'.

  function Mars () {} // Capitalized because this is a constructor function.

  Mars.prototype.doSomething = function(foo) {
    //do something with X
    return X[foo]; // For example.
  }

  namespace.mars = new Mars(); // Lowercase on 'namespace.mars' because it is an instance.

}(myApp))


// Use...
myApp.mars.doSomething(foo); // Does something.
Mars; // undefined
X; // undefined
Y; //undefined

我认为下面的示例可以让您深入了解私有、公共和静态变量和方法

function Mars(){
  // private variables
  var x = [{A:1, B:2, C:3},{A:1, B:2, C:3}];
  var y = [{A:1, B:4, C:2},{A:1, B:2, C:3}]; 

  // public variables
  this.z = 2;

  // privileged methods, can access private variables
  this.getX = function(){
      return x;
  };

  this.getY = function(){
      return y;
  };  
}

// public prototype method, can not access private variables
// access private variables through getters
Mars.prototype.getZ = function(){
  return this.z;
}

// static variable
Mars.staticVar = 1;

// static method
Mars.staticMethod = function(){
   console.log('It is the static method');
}



var marsObj = new Mars();
console.log(marsObj.getX()); //Array [ Object, Object ]
console.log(marsObj.getZ()); //2

Mars.staticMethod(); // "It is the static method"
marsObj.staticMethod(); // Exception: mars.staticMethod is not a function
为了理解JavaScript中的OOPS,我推荐本教程:

我发现您希望给出一些结构并组织javascript代码。这最好用Javascript处理,通常称为
模块模式

简而言之,它的工作原理如下:

var MODULE = (function () {
    var my = {},
        privateVariable = 1;


    function privateMethod() {
        // ...
    }

    my.moduleProperty = 1;
    my.moduleMethod = function () {
        // ...
    };

    return my;
}());

这段代码和进一步的阅读记录在和文章中。模块模式有一些巧妙的变化,其中之一就是代码的其余部分所揭示的模块模式,你是指你的类的方法吗?你担心的是一些你不应该担心的事情@SprottenWells不,我指的是其他50个左右的函数类(总共数百个函数)。感觉好像我在向全球乱扔很多其他类都不需要知道的东西。那么@Azeirah的答案是你应该去做的是这个Node.js还是客户端?
var MODULE = (function () {
    var my = {},
        privateVariable = 1;


    function privateMethod() {
        // ...
    }

    my.moduleProperty = 1;
    my.moduleMethod = function () {
        // ...
    };

    return my;
}());