首页 > 代码库 > js私有化属性
js私有化属性
我们先来看一个例子:
var Demo1 = function(val){ this.value =http://www.mamicode.com/ val; this.getValue = http://www.mamicode.com/function(){ return this.value; } };var demo1Obj = new Demo1(1);alert(demo1Obj.value); // 1demo1Obj.value = http://www.mamicode.com/0;alert(demo1Obj.getValue()); // 0
Demo1的对象都会有一个value属性,在new的时候进行初始化。但是value本身却不是私有属性,我们可以通过‘.value‘的方式直接访问改属性。
但是如何将value属性私有化呢?
这里主要问题就是定义value变量直接定义在了this对象的属性上,这就让每个Demo1的对象都拥有了value属性,
其实我们可以将value定义为只存在于对象初始化时,让value变成Demo1函数中的局部变量,这样其他在函数外部就访问不到了,同时我们也给于其对象以访问该属性的接口
如:
var Demo1 = function(val){ var value =http://www.mamicode.com/ val; this.getValue = http://www.mamicode.com/function(){ return value; }; this.increment = function(inc){ value += inc; }};var demo1Obj = new Demo1(1);alert(demo1Obj.value); // 0demo1Obj.value = http://www.mamicode.com/0;demo1Obj.increment(4);alert(demo1Obj.getValue()); // 5
其实我们可以用到闭包的知识,
如下例所示:
var Demo2 = function(val){
var value = http://www.mamicode.com/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对象上,而是放到整个函数的局部变量中。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。