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

js私有化属性

时间:2014-08-21 16:38:35      阅读:1111      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   strong   ar   问题   div   

我们先来看一个例子:

var Demo1 = function(val){
      this.value = val;
      this.getValue = function(){
            return this.value;  
    }    
};

var demo1Obj = new Demo1(1);
alert(demo1Obj.value); // 1
demo1Obj.value = 0;
alert(demo1Obj.getValue()); // 0

Demo1的对象都会有一个value属性,在new的时候进行初始化。但是value本身却不是私有属性,我们可以通过‘.value‘的方式直接访问改属性。

但是如何将value属性私有化呢?

这里主要问题就是定义value变量直接定义在了this对象的属性上,这就让每个Demo1的对象都拥有了value属性,

其实我们可以将value定义为只存在于对象初始化时,让value变成Demo1函数中的局部变量,这样其他在函数外部就访问不到了,同时我们也给于其对象以访问该属性的接口

如:

var Demo1 = function(val){
      var value = val;
      this.getValue = function(){
            return value;  
      };
      this.increment = function(inc){
           value += inc;
      }
};

var demo1Obj = new Demo1(1);
alert(demo1Obj.value); // 0
demo1Obj.value = 0;
demo1Obj.increment(4);
alert(demo1Obj.getValue()); // 5

 

其实我们可以用到闭包的知识,

如下例所示:

var Demo2 = function(val){
  var value = val;
return {
     increment: function(inc){
      if(typeof inc === ‘number‘){
        value += inc;
      }
     }, getValue :
function(){ return val; } } }; var demo2Obj = new Demo2(4); alert(demo2Obj.getValue()); // 4
alert(demo2Obj.val);//undefined

在Demo2中,实例化对象后发挥的是一个新的结构体,该结构体中的方法可以访问到他被创建时的上下文,就是我们所说的闭包。我们可以调用该闭包中的函数getValue,获取在实例化时传入的参数val的值。

注:这里在闭包中访问到的值,也不是该属性值的拷贝,而是其本身,因而increment中是可以对其进行修改的。

而且value的值是无法在外部直接获取到的,这就实现了对象属性的封装,同时也可以通过闭包的形式对其进行相应权限的操作。

总之,私有化属性的方法就是不将属性直接定义在this对象上,而是放到整个函数的局部变量中。

js私有化属性,布布扣,bubuko.com

js私有化属性

标签:style   blog   color   io   strong   ar   问题   div   

原文地址:http://www.cnblogs.com/goupb/p/3927191.html

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