PostsOldAbout

javascript之私有变量

· 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 />

2026 © zwkang.RSS