官术网_书友最值得收藏!

Private variables

Closures are frequently used to encapsulate some information as private variables. JavaScript does not allow such encapsulation found in programming languages such as Java or C++, but by using closures, we can achieve similar encapsulation:

function privateTest(){
 var points=0;
  this.getPoints=function(){
    return points;
  };
  this.score=function(){
    points++;
  };
}

var private = new privateTest();
private.score();
console.log(private.points); // undefined
console.log(private.getPoints());

In the preceding example, we are creating a function that we intend to call as a constructor. In this privateTest() function, we are creating a var points=0 variable as a function-scoped variable. This variable is available only in privateTest(). Additionally, we create an accessor function (also called a getter)—getPoints()—this method allows us to read the value of only the points variable from outside privateTest(), making this variable private to the function. However, another method, score(), allows us to modify the value of the private point variable without directly accessing it from outside. This makes it possible for us to write code where a private variable is updated in a controlled fashion. This pattern can be very useful when you are writing libraries where you want to control how variables are accessed based on a contract and pre-established interface.

主站蜘蛛池模板: 寻乌县| 沙坪坝区| 三穗县| 偃师市| 宣威市| 北辰区| 东乌珠穆沁旗| 乌恰县| 怀宁县| 金川县| 洛川县| 霸州市| 定远县| 教育| 柳林县| 万荣县| 平和县| 西吉县| 利辛县| 滨海县| 博野县| 博野县| 汽车| 通江县| 万宁市| 宜春市| 延庆县| 房产| 潮州市| 阜宁县| 贵阳市| 瓦房店市| 嵊州市| 沙坪坝区| 长春市| 洛宁县| 西吉县| 寿宁县| 阳江市| 嘉义县| 萝北县|