码迷,mamicode.com
首页 > Web开发 > 详细

JS 函数(6)—私有变量

时间:2016-08-10 21:02:50      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

私有变量

 

私有变量

任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。

私有变量包括函数的参数、局部变量和在函数中定义的其它函数。

 

特权方法:有权访问私有变量和私有函数的方法。

有两种在对象上创建特权方法的方式:其一是在构造函数中定义特权方法。

 1 function MyObject() {
 2     //私有变量和私有函数
 3     var privateVariable = 10;
 4     function privateFunction() {
 5         return true;
 6     }
 7     //特权方法
 8     this.publicMethod = function() {
 9         privateVariable++;
10         return privateFunction();
11     };
12 }

能够在构造函数中定义特权方法,是因为:特权方法作为闭包有权访问在构造函数中定义的所有变量和函数。

对这个例子而言,变量privateVariable和函数privateFunction只能通过特权方法访问。

 

利用私有变量和特权方法,可以隐藏那些不应该被直接修改的数据,例如:

 1 function Person(name) {
 2     this.getName = function() {
 3         return name;
 4     }
 5     this.setName = function(value) {
 6         name = value;
 7     }
 8 }
 9 var person = new Person("CC");
10 alert(person.getName());    //"CC"
11 person.setName("VV");
12 alert(person.getName());    //"VV"

 

构造函数的缺点:每一个新实例都会创建同样一组新方法。

 

静态私有变量

通过在私有作用域中定义私有变量或函数,也可以创建特权方法。

 1 (function() {
 2     //私有变量和私有函数
 3     var privateVariable = 10;
 4     function privateFunction() {
 5         return false;
 6     }
 7     //构造函数
 8     MyObject = function() {
 9     };
10     //特权方法
11     MyObject.prototype.publicMethod = function() {
12         privateVariable++;
13         return privateFunction();
14     };
15 })();

使用函数声明只能创建一个局部函数,这里并没有使用函数声明,也没有使用var关键字,为的就是创建一个全局变量,以方便在函数外部访问。

初始化未经声明的变量,总会创建一个全局变量。(在严格模式下,给未经声明的变量初始化会导致错误)

 

 1 (function() {
 2     var name = "";
 3     Person = function(value) {
 4         name = value;
 5     };
 6     Person.prototype.getName = function() {
 7         return name;
 8     };
 9     Person.prototype.setName = function(value) {
10         name = value;
11     };
12 })();
13 
14 var person1 = new Person("CC");
15 alert(person1.getName());    //"CC"
16 
17 var person2 = new Person("VV");
18 alert(person2.getName());    //"VV"
19 alert(person1.getName());    //"VV"

变量name变成一个静态的、由所有实例共享的属性。

静态私有变量会因为使用原型而增进代码复用,但所有的实例都没有自己的私有变量。

 

多查找作用域链的一个层次,就会在一定程度上影响查找速度。这正是使用闭包或者私有变量的不足之处。

 

JS 函数(6)—私有变量

标签:

原文地址:http://www.cnblogs.com/cc156676/p/5758016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!