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

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.

主站蜘蛛池模板: 聂拉木县| 汤原县| 梁平县| 襄垣县| 巴里| 武汉市| 灵宝市| 太仆寺旗| 同德县| 云浮市| 通化县| 张掖市| 英山县| 车致| 顺昌县| 郴州市| 维西| 南康市| 灵山县| 隆回县| 九龙县| 嘉峪关市| 含山县| 枝江市| 云浮市| 双峰县| 汝州市| 双牌县| 汝南县| 广平县| 高尔夫| 赤城县| 凉山| 乌审旗| 玛沁县| 永善县| 晋宁县| 镇巴县| 平果县| 松潘县| 桓台县|