js私有化属性
我们先来看一个例子:
var Demo1 = function(val){
this.value = val;
this.getValue = function(){
return this.value;
}
};
var demo1Obj = new Demo1(1);
alert(demo1Obj.value);
demo1Obj.value = 0;
alert(demo1Obj.getValue());
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);
demo1Obj.value = 0;
demo1Obj.increment(4);
alert(demo1Obj.getValue());
其实我们可以用到闭包的知识,
如下例所示:
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()); // 4alert(demo2Obj.val);//undefined
在Demo2中,实例化对象后发挥的是一个新的结构体,该结构体中的方法可以访问到他被创建时的上下文,就是我们所说的闭包。我们可以调用该闭包中的函数getValue,获取在实例化时传入的参数val的值。
注:这里在闭包中访问到的值,也不是该属性值的拷贝,而是其本身,因而increment中是可以对其进行修改的。
而且value的值是无法在外部直接获取到的,这就实现了对象属性的封装,同时也可以通过闭包的形式对其进行相应权限的操作。
总之,私有化属性的方法就是不将属性直接定义在this对象上,而是放到整个函数的局部变量中。
js私有化属性的更多相关文章
- js对象属性 通过点(.) 和 方括号([]) 的不同之处
// js对象属性 通过点(.) 和 方括号([]) 的不同之处 // 1.点操作符: 静态的.右侧必须是一个以属性名称命名的简单标识符.属性名用一个标识符来表示.标识符必须直接出现再js ...
- js获取属性
js获取属性的方法: document.getElementById(); document.getElementsByTagname(); document.getElementsByClassna ...
- js中属性类型:数据属性与访问器属性
js中属性类型分为两种:数据属性和访问器属性 在js中,对象都是由名值对构成的,名:就是我们所说的属性名,值就是属性对应的值(基本值.对象.方法). ECMA-262第5版定义了只有内部才用的特性,描 ...
- JS中"属性"的用法
JS的属性和C#有相似之处 ! 使用get和set来进行属性的获取和设置 var obj={ a:"1", get age(){ return obj.a; }, set age ...
- JS修改属性,六种数据类型
JS修改属性 一般修改单个属性是通过JS修改的,比较方便.改多个属性通过css样式改更方便. 1.特殊:通过JS修改包含"-"符号的属性,例如margin-top // 特殊 修改 ...
- 动态设置js的属性
目标:js的属性名能够使用变量 举例:js对象object,当赋给该对象属性的时候能够採用下面方式 var object; object.prop1 = "value1"; obj ...
- Vue.js 计算属性是什么
Vue.js 计算属性是什么 一.总结 一句话总结: 模板 表达式 维护 在模板中表达式非常便利,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护 ...
- javascript 私有化属性,和公共属性
function TestClassA(name, number) { this.name = name; //public this.number = number; //public var ac ...
- Python 私有化属性
# 对象的基本理论 # 什么事对象? # 万物皆对象 # 对象是具体物体 # 拥有属性 # 拥有行为 # 把很多零散的东西,封装成为一个整体 # 举例:王二小 # 属性 # 姓名 # 年龄 # 身高 ...
随机推荐
- JavaScript学习笔记——简单无缝循环滚动展示图片的实现
今天做了一个简单的无缝循环滚动的实例,这种实例在网页中其实还挺常见的,下面分享一下我的学习收获. 首先,无缝滚动的第一个重点就是——动.关于怎么让页面的元素节点动起来,这就得学明白关于JavaScri ...
- asp.net 一个简单的登录控制
如果说一个网站需要用户登录后才能浏览,那么用户登录控制就不可避免.但是对于几百个以上的页面,不可能每个页面都做一次登录验证.因此,这需要在母版页中进行登录控制,这样就可以使得每一个使用这个母版页的子页 ...
- EditText默认不显示光标,不可编辑,点击它,进入编辑状态,光标显示
设置EditText不可编辑,光标不可见: et.setCursorVisible(false); 设置EditText可编辑,光标可见: et.setOnClickListener(new OnCl ...
- Stat
Description 请你编程实现一个简单(渣渣)的文本编辑器,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置.注意:匹配单词时,不区分大小写,但要求完全匹配,即给定 ...
- golang sha1 signature
package models import ( "crypto/hmac" "crypto/sha1" "encoding/base64" ...
- ZRender源码分析3:Painter(View层)-上
回顾 上一篇说到:ZRender源码分析2:Storage(Model层),这次咱看来看看Painter-View层 总体理解 Painter这个类主要负责MVC中的V(View)层,负责将Stora ...
- PHP获取IP信息
<?php /** * 获取客户端IP * @param integer $type 返回类型 0:string,1:long * @return string|long */ function ...
- Linux系统针对网卡中断的优化处理
摘要: 中断: 当网卡接收到数据包后,会触发硬中断,通知CPU来收包.硬中断是一个CPU和网卡交互的过程.这其实会消耗CPU资源.特别是在使用速度极快的万兆网卡 之后,大量的网络交互使得CPU很大一部 ...
- SetThreadAffinityMask设置线程亲缘性
The SetThreadAffinityMask function sets a processor affinity mask for the specified thread. DWORD_PT ...
- 谈谈ILDasm的功能限制与解除
原文:谈谈ILDasm的功能限制与解除 首先,我在此申明,此文并不是教别人突破限制,我们只是用学习的眼光看问题 大家都知道ILDasm是.NET程序的反编译工具,它是由Microsoft提供的反编译工 ...