我最近发现(here)有一种方法可以让类中的变量在Javascript中完全私有,这意味着无法通过点运算符访问。
它的工作原理如下:JSFIDDLE
function PrivateRuns(startOff) {// make an object
function getRuns() {// private function used to get private variables
privateRuns -= 1; // accessable with "out" because in same scope
privateRuns = Math.max( privateRuns, 0);
return privateRuns + privateHits;
}
var privateRuns = startOff;
var privateHits = 6;
this.setRuns = function(val){ privateRuns = Math.max(val, 0); };
this.getAction = function () {// this function is of scope "this"
//out.privateHits = out.privateHits + 1;
return ( "runs n hits: "+ getRuns() +"   " );
};
}
var myRuns = new PrivateRuns(10);
myRuns.privateRuns = -10;// does not work
//myRuns.setRuns(-10);// DOES work
for( var i = 0; i < 10; i ++ ){
$("HTML").append( myRuns.getAction() +"<br>" );
}
现在我知道如果使用得当,这有很多好处,但是真的有必要吗?我在教程中很少见过这个,我不能说我在开源项目中亲自寻找过这个。
关于此,
这是ECMAScript语言规范中的错误的一种解决方法,导致内部函数的设置不正确。
答案 0 :(得分:0)
您可能想要使用“私有”变量的一个原因是您正在开发一个将被其他人使用的库。您可以封装所有私有变量,函数等,并将公共API公开到库中。这样可以将您的库包含在页面中,而不必担心任何变量名称与页面上的其他变量冲突。举个例子:jQuery。您可以通过变量名jQuery或$访问所有公共API。这意味着只有变量jQuery和$已添加到您的页面中,因此您可以自由使用您想要的任何其他变量名称,而不必担心与jQuery冲突。私有变量允许您根据需要在库中实现内容,而无需担心页面上的某些代码会故意或意外地改变预期的行为。
这不是一个错误,它只是变量在JavaScript中作用域的方式的副作用
查看立即调用的函数表达式的概念,作为私有变量和函数可能有用的示例用例(http://benalman.com/news/2010/11/immediately-invoked-function-expression/)。有很多例子在JavaScript中使用私有变量 - 如前所述,jQuery等JavaScript库广泛使用它们。