位置:海鸟网 > IT > JavaScript >

javascript的私有成员(private)

  对象

  Javascript 根本上是和对象相关的。数组是对象。函数是对象。对象是对象。那什么是对象呢?对象是名-值对的集合。名是字符串,值可以是字符串,数字,布尔值或者对象(包括数组和函数)。通常对象是像哈希表一样执行地,这样便于值地快速检索。

  如果值是函数,我们可以认为这是一个方法。当一个对象地方法被调用的时候,this 变量就设置为这个对象。方法就可以通过 this 变量来访问实例变量。

  对象可以由用来初始化对象的构造函数生成。构造函数提供了其他语言中类所提供的特性,包括静态变量和方法。

  公共

  对象的成员全部是公共成员。任何函数都可以访问、修改或者删除这些成员,或者增加新成员。有两种向新对象中添加成员的方法:

  在构造函数中添加

  这个技术通常用于初始化公共实例变量。使用构造函数的 this 变量向对象中添加成员

 

function Container(param){
 this.member = param;
}

  这样,如果我们创建一个新对象:

var myContainer = new Container('abc');

  这样 myContainer.member 就包含 ‘abc’ 了。

  在原型中添加

  这个技术通常用于添加公共方法。当一个成员被检索并且没能在对象本身里面找到时,就要从对象的构造函数的原型成员里面寻找。原型机制是用于继承的。也用于节省内存。向一个构造函数生成的所有对象中添加一个方法,只需要向构造函数原型中添加一个函数

 Container.prototype.stamp = function(string){
  return this.member + string;
 }

  因此,我们可以调用这个方法:

myContainer.stamp('def')

  结果为 ‘abcdef’。

  私有

  私有成员是由构造函数生成的。一般构造函数的变量和参数都是私有成员。

function Container(param){
  this.member = param;
  var secret = 3;
  var that = this;
 }

  这个构造函数生成了3个私有实例变量:param,secret 和 that。它们和对象相关联,但是它们不仅在函数外边不可访问,而且对对象自身的公共方法来说也是不可访问的。它们只可以被私有方法访问。私有方法是构造函数的内部函数。

function Container(param) {
 
    function dec() {
        if (secret > 0) {
            secret -= 1;
            return true;
        } else {
            return false;
        }
    }
 
    this.member = param;
    var secret = 3;
    var that = this;
}

  私有方法 dec 检查 secret 实例变量。如果它大于零,将其减一并返回 true。否则返回 false。它可以用作限定对象使用3次。

  按照习惯,我们设置了一个私有的 that 参数。它使得这个对象对于私有方法使可见的。在 ECMAScript 语言规范中,这是一个可行的错误,它使得 this 对于内部函数被不正确地设置。(This is a workaround for an error in the ECMAScript Language Specification which causes this to be set incorrectly for inner functions.)

  私有方法不能被公共方法调用。要想使得私有方法有用,需要介绍一下特权方法。