关于JavaScript中Get/Set访问器
-
有时候大家可能会纳闷,在使用JavaScript的时候,只需要给一个系统变量赋值就可以触发一系列操作去相应。
但是我们在写Js的时候,修改了一个自定义变量,却连个P都没有。是不是很郁闷呢?
其实,我们现在就可以做类似系统变量那样的功能了!
做个假设,我们有一个变量,要求可以输入出生年份并自动计算当前年龄。
如:
// 定义一个年龄变量并赋予初始值
var age = 18;
// 我们手动输入的出生年份
age = 1994;
// 此时age=?大家可能说我最后的这个疑问有毛病,骂我是SB。。。没关系。。。刚才我们提过需求了嘛……
按需求来说,age这个时候应该是等于20。
很明显要做这个操作我们要调用一个函数来进行处理,但是能不能不手动调用函数来完成这个功能呢?
下面我们来介绍一下此章主角 Get/Set访问器!
说明了,就是我们可以限制一个变量是否可以被访问或是否可以被重写。
另外还有一个功能是,我们在访问或重写时可以执行其他语句进行处理。
使用方法一:
var age = 18;
var test = {
get age (){
return age;
},
set age (value){
if(value > 100) age= new Date().getFullYear() - value;
else age = value;
}
};这个时候我们再写如下代码来进行操作。
test.age = 1994;
alert(test.age);如何?是不是正确的显示了20这个数字?
可是以上方法比较麻烦也不好理解。我们来看看第二种方法是否更有实用性:
function Person() {
var age = new Date().getFullYear() - 18;
Object.defineProperty(this, "age", {
get: function () { alert("内部存储数据为:" + age); return new Date().getFullYear() - age; },
set: function (value) { age = value; }
});
}使用以下代码测试:
var p = new Person();
p.age = 1994;
alert("外部获取到的数据为:" + p.age);具体使用哪种方法按照需求进行选择。
拓展知识:
问:为什么以前没听过Get/Set访问器?
答:因为这是ECMAScript 5新增特性,比较新,所以以前自然是没有了。
问:我可以在什么样的浏览器中运行?
答:具体的我没测试过,但是就我本机环境来说这些版本的浏览器可以运行(Chrome 32、IE 9、FireFox 28、Opera 19、Safari 5.1.7)。
如有其它问题请评论讨论~谢谢!~撒花~~~
关于JavaScript中Get/Set访问器的更多相关文章
- javascript中数据属性与访问器属性
1.数据属性 Configurable:true|false,表示能否通过delete将属性删除,默认为true.当把属性的Configurable设置为false后,该属性不能通过delete删除, ...
- JavaScript 数据属性和访问器属性
在JavaScript中对象被定义为"无序属性的集合,其属性可以包含基本值.对象或函数."通俗点讲,我们可以把对象理解为一组一组的名值对,其中值可以是数据或函数. 创建自定义对象通 ...
- JavaScript ECAMScript5 新特性——get/set访问器
之前对get/set的理解一直有误,觉得get set 是对象属性方法.看了别人的博客也有很多疑问,今天系统的做了很多测试终于弄明白了.(自己通过看书和写demo测试的,如有不对欢迎大家批评指正) g ...
- JavaScript 属性类型(数据属性 访问器属性)
ECMA-2把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来说,这就相当于说对象是一组没有特定顺序的值.对象的属性或方法都有一个名字,而每个名字映射到一个值.我们可以把E ...
- js中属性类型:数据属性与访问器属性
js中属性类型分为两种:数据属性和访问器属性 在js中,对象都是由名值对构成的,名:就是我们所说的属性名,值就是属性对应的值(基本值.对象.方法). ECMA-262第5版定义了只有内部才用的特性,描 ...
- C#中的GET和SET访问器
我们在学习C#语法的属性时,都要首先和GET,SET访问器打交道,从英文的字面意思上理解,GET应该就是获得什么什么,而SET应该是设置什么什么,那我们看一下,官方是怎么定义这对访问器的:get是读取 ...
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- 深入理解JavaScript中的属性和特性
深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ...
- javascript中的属性类型
ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特性.ECMA-262定义这些特性是为了实现javascript引擎用的,因此在javasc ...
随机推荐
- scala编程第17章学习笔记(4)——元组
元组可以把固定数量的条目组合在一起以便于作为整体传送.不像数组或列表,元组可以保存不同类型的对象. 元组常用来返回方法的多个值.例如,下面的方法找到集合中的最长单词并返回它的索引: scala> ...
- 第十三章 ThreadPoolExecutor源码解析
ThreadPoolExecutor使用方式.工作机理以及参数的详细介绍,请参照<第十二章 ThreadPoolExecutor使用与工作机理 > 1.源代码主要掌握两个部分 线程池的创建 ...
- 变量声明置顶规则、函数声明及函数表达式和函数的arguments属性初始化
一.变量声明和变量赋值: if (!("a" in window)) { ; } alert(a);//a为? 你可能认为alert出来的结果是1,然后实际结果是“undefine ...
- python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 30: illegal multibyte sequence
昨天用用python3写个日志文件,结果报错UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 30: ...
- Cognos两种建模工具对于复杂日期维度的处理比较(上)
众所周知,在数据仓库中,日期维度是相当重要的.对数据分析的过程中可以从不同的角度去分析,比如按照下面的日期层次去分析数据. 年-季度-月-日 年-月-日 年-周-日 本示例将利用简单的商品销售分析的d ...
- Thread-Local Storage for C99
线程本地存储(TLS)是一种机制,通过这样的机制进行变量分配.在每一个现存线程都有一个实例变量.这样的执行模型GCC用来实现这个,起源于IA-64处理器,可是已经被迁移到其它的处理器.它须要大量的支持 ...
- svg translate 操作
function dragElement(evt) { var target = evt.target; var id = target.id; var dx = evt.dx, dy = evt.d ...
- js 暂时性死区
1.概念 在代码块内,使用let.const命令声明变量之前,该变量都是不可用的.这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ). 2.注意 “暂时性死区”也意味 ...
- 解决win10 64位系统可用2.99g
msconfig-->引导-->高级选项-->最大内存勾去掉
- java 图片数据Base64编解码
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...