javascript之私有变量

<strong>对于javascript所有对象属性都是公有的</strong>



<strong>但是在函数外部无法访问函数内部定义的变量</strong>



<strong>这个就是一个私有变量的概念</strong>



<br />

私有变量

function xxx(){
    var key = 10;//私有变量
    function xxxxx(){
        //私有函数
    }
}
var keys = new xxx();
alert(keys.key);undefined
//无法直接访问到私有变量



<div>
    <br />
</div>
<div>
    function xxx(){
</div>
<div>
    &nbsp;&nbsp;&nbsp;&nbsp;var key = 10;//私有变量
</div>
<div>
    &nbsp;&nbsp;&nbsp;&nbsp;this.key=20;//共有变量
</div>
<div>
    &nbsp;&nbsp;&nbsp;&nbsp;function xxxxx(){
</div>
<div>
    &nbsp;&nbsp;&nbsp;&nbsp;//私有函数
</div>
<div>
    &nbsp;&nbsp;&nbsp;&nbsp;}
</div>
<div>
    }
</div>
<div>
    var keys = new xxx();
</div>
<div>
    alert(keys.key);//20
</div>
<div>
    <br />
</div>

这是一种构造器函数

我们可以用这种函数方式来创建<strong>对象</strong>



上面即是例子特权方法是通过闭包来进行操作私有变量的



在此时实例化这个构造函数创建对象的时候



实例对象不能直接调用key跟TestFun函数的



<div>
    这一点在隐藏变量的时候也是极为有用
</div>



定义特权方法的坏处是每一次创建实例化都需要创建一组新方法

而静态私有变量可以避免这种方法

<div>
    (function(){
</div>
<div>
    &nbsp;&nbsp;&nbsp;&nbsp;var key = 10;//私有变量
</div>
<div>
    &nbsp;&nbsp;&nbsp;&nbsp;this.key=20;//共有变量
</div>
<p>
    &nbsp; &nbsp; Myobject = function(){


    &nbsp;&nbsp;&nbsp;&nbsp;}


    &nbsp; &nbsp; function xxx(){


    &nbsp;&nbsp;&nbsp;&nbsp;}


    &nbsp; &nbsp; MyObject.prototype.publicxxx=function(){


    &nbsp; &nbsp; key++;


    &nbsp; &nbsp; return xxx();


    &nbsp;&nbsp;&nbsp;&nbsp;}

<div>
    })();
</div>

<h3>
    静态私有变量
</h3>
<div>
    私有作用域内创建私有变量
</div>
<div>
    再加上一个构造函数
</div>
<div>
    在构造函数的原型上添加定义方法
</div>
<div>
    每次调用实际上都是在使用原型  创建一次即可
</div>
<div>
    但是也会影响到共享的属性
</div>
<div>
    (私有变量会变成一个静态的  由所有实例共享的属性 )
</div>
<p>
    (代价是每个实例实际上都没有了自己的“私有变量”)


    <br />

<h1>
    That's all
</h1>

<br />

发表评论

电子邮件地址不会被公开。 必填项已用*标注