在ECMAScript 5中,属性值可以用一个或两个方法代替,这两个方法就是getter和setter

var man = {
name : 'lidg',
weibo : '@lidg',
get age(){
return new Date().getFullYear() - 1998;
},
set age(val){
console.log('Age can\'t be set to ' + val);
}
}
console.log(man.age); //20
man.age = 100; //Age can't be set to 100
console.log(man.age); //

利用它们可以实现对数据的访问限制。

var man = {
name : 'lidg',
$age : null, //$只是表示该属性值不想暴露在外面,没有特殊含义
weibo : '@lidg',
get age(){
if(this.$age == undefined){ //不是严格等于,null等于undefined
return new Date().getFullYear() - 1998;
}else{
return this.$age;
}
},
set age(val){
//将val转为数字
//如果val本身就是数字则什么都不做,如果不是则返回NaN
val =+ val;
if(!isNaN(val)&&val>0&&val<150){
this.$age =+ val;
}else{
throw new Error("Incorrect val :" + val);
}
}
}
console.log(man.age); //
man.age = 100;
console.log(man.age); //
man.age = 'abc'; //error: Incorrevt val: NaN

javascript中的getter和setter的更多相关文章

  1. js中的访问器属性中的getter和setter函数实现数据双向绑定

    嗯,之前在读js红宝书的时候,在对象那一章有介绍属性类型.第一种数据类型指的是数据属性,第二种是访问器属性.在初识vue的时候,其双向数据绑定也是基于访问器属性中的getter和setter函数原理来 ...

  2. JS中的getter与setter

    一.什么是getter和setter getter 是一种获得属性值的方法,setter是一种设置属性值的方法 getter负责查询值,它不带任何参数,setter则负责设置键值,值是以参数的形式传递 ...

  3. javascript 中的getter,setter

    1.什么是getter,什么是setter? getter 是一种获得属性值的方法,setter是一种设置属性值的方法. 2.怎么定义? 有2种办法: 在对象初始化的时候定义 在对象定义后的时候定义 ...

  4. jQuery中的getter和setter方法

    1.attr()方法是jQuery中用于HTML属性的getter/setter.一个相关函数是removeAttr(). 2.css()方法和attr()方法很类似,只是css()方法作用于元素的c ...

  5. JS中的getter和setter

    对象有两种属性:(1)数据属性,就是我们经常使用的属性(2)访问器属性,也称存取器属性 存取器属性就是一组获取和设置值的函数.getter负责获取值,它不带任何参数.setter负责设置值,在它的函数 ...

  6. Eclipse中generate getter and setter对boolean的反应

    有点意思 , 如果变量是boolean类型的  ,就会生成isxxx开头的getter方法 , 但如果是Boolean对象的 , 就会生成getterxx开头的getter对象. 例如 Boolean ...

  7. JavaScript getter和setter

    对象的属性是由属性名name,值key,和其他特性(可读写性 writable,可枚举性enumerable,可配置性configurable)组成的.从ES5开发,提供了getter和setter ...

  8. Javascript中对象的Obeject.defineProperty()方法-------------(ES5/个人理解)

    在讲到Obeject.defineProperty()方法之前先得说明一下ECMAScript中有两种属性:数据属性和访问器属性. 两种属性存在的意义:描述对象属性(key)的一些特性,因为这些属性是 ...

  9. 【你不知道的javaScript 上卷 笔记6】javaScript中的对象相关内容

    一.创建一个对象的语法 var myObj = { key: value // ... };//字面量 var myObj = new Object(); //new myObj.key = valu ...

随机推荐

  1. Json序列化,有多对一和多对多关系时出现的问题

    /** * 这是一张 单表中的双向一对多,多对一 关系.自己跟自己一对多多对一 */ @Entity @Table(name="tb_test") public class Cre ...

  2. 在Linux中执行.sh脚本,异常

    在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分析:这是不同系统编码格式引起的:在windows系统中 ...

  3. 学习笔记TF029:实现进阶卷积网络

    经典数据集CIFAR-10,60000张32x32彩色图像,训练集50000张,测试集10000张.标注10类,每类图片6000张.airplance.automobile.bird.cat.deer ...

  4. move UVs of a texture

    Go to the material options on the left, and use a Custom UV. Create a vector parameter, use it to sc ...

  5. JVMj机制

  6. py-day2-5 python 百分号字符串拼接

    #### 字符串格式化. # %s 代替任何的元素 (数字,字符串,列表··) print('I live %s crty' %'my') print('I live %s crty' %'[6,8, ...

  7. [转]boost::python开发环境搭建

    转自:http://www.cnblogs.com/gaoxing/p/4317051.html 本来想用mingw编译boost::python模块,网上看了下资料太少,只有使用vs2012 操作环 ...

  8. SoundManager 2 / API Demo and Code Examples

    http://www.schillmania.com/projects/soundmanager2/

  9. 【python】参数中的*args和**kwargs

    转自https://www.cnblogs.com/xuyuanyuan123/p/6674645.html#undefined 多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照 ...

  10. MySQL之Haproxy+Keepalived+MySQL高可用均衡负载部署 (网络摘抄)

    来源于:https://blog.csdn.net/weisong530624687/article/details/71536837?utm_source=blogxgwz3 一.安装主从MySQL ...