首页 > 语言 > JavaScript > 正文

JavaScript私有变量实例详解

2024-05-06 15:42:54
字体:
来源:转载
供稿:网友

本文实例讲述了JavaScript私有变量。分享给大家供大家参考,具体如下:

任何在函数中定义的变量,就是私有变量,因为这些变量在函数外部是无法访问到的。总的来说,私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。

function add(num1, num2){  var sum = num1 + num2;  return sum;}

上面的例子中的 num1, num2, sum 就是函数的私有变量。

如果在这个函数内部创建一个闭包,那么闭包通过自己的作用域链也可以访问这些变量,利用这一点,就可以创建用于访问私有变量的公有方法。

有权访问私有变量和私有函数的公有方法叫做特权方法。

1. 构造函数模式

创建特权方法的方式有两种,第一种是在构造函数中定义:

function MyObject(){  //私有变量  var privateVariable = 10;  //私有函数  function privateFunction(){    return false;  }  //特权方法  this.publicMethod = function(){    privateVariable++;    return privateFunction();  };}

这里定义的的特权方法是一个闭包,所以能够访问在构造函数中定义的私有变量和私有函数。在创建 MyObject 实例后,只能通过特权方法来访问定义的私有变量和函数。

利用这种技术,可以隐藏那些不能被外部直接修改的数据:

function Person(name){  this.getName= function () {    return name;  };  this.setName= function (value) {    name=value;  }}var person=new Person("deniro");console.log(person.getName());//deniroperson.setName("lily");console.log(person.getName());//lily

上面的代码定义了两个特权方法,它们都可以在函数外部被调用,因为它们是闭包,所以可以通过作用域访问 name。name 在 Person 的每一个实例中都不同,因为每次调用构造函数都会重新创建这两个方法。

在构造函数中创建特权方法的缺点是,必须使用构造函数模式来实现,而这样做会在每个实例上创建同样的一组新方法!

2. 静态私有变量模式

通过在私有作用域中定义私有变量和函数,也可以创建特权方法,基本模式是:

(function(){  //私有变量  var privateVariable = 10;  //私有函数  function privateFunction(){    return false;  }  //构造函数  MyObject = function(){  };  //公有/特权方法  MyObject.prototype.publicMethod = function(){    privateVariable++;    return privateFunction();  };})();

公有方法在原型上定义,使用的原型模式。另外,我们使用的是函数表达式来定义构造函数,而且没有用 var,这种在初始化时未经声明的变量,就会创建一个全局变量。因此,MyObject 就成了一个全局变量,能够在私有作用域之外被访问到。但在严格模式下给未经声明的变量赋值会导致错误。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选