网站地图    收藏   

主页 > 前端 > javascript >

JavaScript私有变量用法详解

来源:自学PHP网    时间:2014-09-19 14:47 作者: 阅读:

[导读] 私有实例变量的原理是根据作用域。私有实例变量是在 JavaScript 的 function 内部用 var 关键字实现,只在 function 内部有效。...

如果接触过其它语言的,应该会接触过私有变量这一个概念。所谓私有就是没有受保护,不能修改与访问,只能通过你给的API接口访问与修改。但是在JavaScript中并没有私有变量这个概念,所有成员都可以通过下标访问与修改,如:

私有变量

 代码如下 复制代码

var F = function(){};
 
F.prototype.name = "zhangsan";
 
var a = new F();
 
alert( a.name ); // zhangsan
 
a.name = "lisi";
 
alert( a.name ); // lisi


在JavaScript里,实例的成员变量就这样轻而易举的被修改,设置delete。有不少这么干

 代码如下 复制代码

var F = function(){};
 
// 变量前面加下划线
F.prototype._name = "zhangsan";
 
var a = new F();
 
// 访问跟正常访问一样
alert( a._name ); // zhangsan
 
// 实际上也能轻而易举的被修改
a._name = "lisi";
 
alert( a._name ); // lisi

加下划线做位私有变量貌似很普遍,认可。但这仅是一种大家默认的公约,其实利用JavaScript特性,我们可以这样定义私有变量:

 代码如下 复制代码

(function(window){
     
    // 定义私有变量默认值
    var name = "zhangsan";
     
    var F = function(){};
 
    // 访问私有变量
    F.prototype.getName = function(){
        return name;
    };
     
    // 更新私有变量
    F.prototype.setName = function(str){
        name = str;
    };
     
    window.F = F;
     
})(window);
 
 
var a = new F();
 
a.getName();    // zhangsan
 
a.setName("lisi");
 
a.getName();    // lisi

这种方式也是被使用最多最广泛的方式。


私有静态变量

 代码如下 复制代码


<script language="javascript" type="text/javascript">
var JSClass = (function() {
    var privateStaticVariable = "nowamagic";
    var privateStaticMethod = function() {
        alert("nowamagic");
    };
    return function() {
        this.test1 = function() {
            return privateStaticVariable;
        }
        this.test2 = function(obj) {
            privateStaticVariable = obj;
        }
        this.test3 = function() {
            privateStaticMethod();
        }
    };
})();
var testObject1 = new JSClass();
var testObject2 = new JSClass();
alert(testObject1.test1());
testObject1.test2("change nowamagic");
alert(testObject2.test1());
testObject2.test3();
</script>


动态生成私有变量访问器

 代码如下 复制代码

 

//创建一个新的用户对象,接受一个有许多属性的对象作为参数
function User(properties)
{
//遍历该对象的所有属性,并保证其作用域正确
for(var i in properties){
(function(which){
var p=i;
//创建此属性的一个新的读取器(getter)
which["get"+p]=function(){
return properties[p];
};

//创建此属性的一个新的设置器(setter)
which["set"+p]=function(val)
{
properties[p]=val;
};
})(this);
}
}
//创建一个新的用户对象实例,并把具有两个属性的一个对象传入作为参数
var user=new User({name:"Bob",age:44});
//读取属性值
alert(user.getname());
//设置属性值
user.setage(23);

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论