gpt4 book ai didi

javascript - 我应该在 javascript 中使用私有(private)变量吗?

转载 作者:行者123 更新时间:2023-11-28 07:26:39 25 4
gpt4 key购买 nike

我最近发现( here )有一种方法可以使类中的变量在Javascript中完全私有(private),这意味着无法使用点运算符访问。

它的工作原理如下: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>" );
}

现在我知道,如果使用得当,它有很多好处,但真的有必要吗?我很少在教程中看到这一点,而且我不能说我个人在开源项目中寻找过这一点。

对此,

  1. 这实际上是一个错误吗? (我读到的网站提到这是一次“黑客攻击”)

This is a workaround for an error in the ECMAScript Language Specification which causes this to be set incorrectly for inner functions.

  • 这是一种常见做法吗?为什么或为什么不?
  • 最佳答案

    您可能想要使用“私有(private)”变量的原因之一是您正在开发一个将由其他人使用的库。您可以封装所有私有(private)变量、函数等,并将公共(public) API 公开到您的库中。这将允许您的库包含在页面上,而不必担心任何变量名称与页面上的其他变量冲突。以:jQuery 为例。您可以通过变量名 jQuery 或 $ 访问所有公共(public) API。这意味着只有变量 jQuery 和 $ 已添加到您的页面中,因此您可以自由使用您想要的任何其他变量名称,而不必担心与 jQuery 冲突。私有(private)变量允许您在库中实现您想要的东西,而不必担心页面上的某些代码有意或无意地改变预期的行为。

    这不是一个错误,它只是 JavaScript 中变量作用域方式的副作用

    查看立即调用函数表达式的概念作为示例用例,其中私有(private)变量和函数可能很有用( http://benalman.com/news/2010/11/immediately-invoked-function-expression/ )。在 JavaScript 中使用私有(private)变量的例子有很多 - 正如前面提到的 JavaScript 库(例如 jQuery)广泛使用它们。

    关于javascript - 我应该在 javascript 中使用私有(private)变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29585694/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com