JavaScript的setter与getter方法

作者:http://hawkzz.com

以前在写项目过程一直都没有使用过Javascript的setter与getter方法,所以对其是一种要懂不懂的概念;今天看书看到这个知识点,还是模模糊糊的,于是就打算研究研究;

Javascript对象的属性是由名字,值和一组特性构成的。那么首先,来了解一下对象的两种属性:

  • 数据属性,我们经常使用,应该很熟悉
  • 访问器属性,也称存取器属性

何为存取器属性?就是一组获取和设置值的函数。在ECMAScript5中,属性值可以用一个或两个方法设置,这两个方法就是getter和setter;因此getter和setter定义的属性被称为存取器属性。

var o = {
    get val(){
        /*函数体*/
        return ;
    },
    set val(n){
        /*函数体*/
    }
}

上面的就是一个存取器属性定义的最简单的方法,可以看出getter和setter方法其实就是取代function的一个函数。

var o = {
    a:3,
    get val(){
        return Math.pow(this.a,2);
    }
}

console.log(o.val);//9
o.val = 100;
console.log(o.val);//9

getter方法是无参数,并且有返回值的;当单独设置getter方法时,只能获取属性值,无法更改其定义的属性值的,保证了数据的安全性;

var o = {
    a:3,
    set val(n){
        this.a = n;
    }
}

console.log(o.val);//undefined

setter方法是有参数,没有返回值的;当单独设置setter方式时,是无法读取属性值的;

var  o ={
    a:3,
    get val(){
        return Math.pow(this.a,n);
    },
    set val(n){
        this.a = Math.max(this.a,n);
    }
}

console.log(o.a);//3
console.log(o.val);//9
o.val = 10;
console.log(o.a);//10
console.log(o.val);//100

通过上面的代码可以看出,其中this是指其对象(即代码中的“o”);

var o ={
     a:3,
    get val(){
        return Math.pow(this.a,n);
    },
    set val(n){
        this.a = Math.max(this.a,n);
    }
}

o.val = 10;
var foo = Object.create(o);
console.log(foo.val);//10
foo.val = 9;
console.log(foo.val);//10

另外,存取器属性也是可以被继承的;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:clearbug原文地址:http://www.cnblogs.com/craftsman-gao/p/48...
    IT程序狮阅读 811评论 1 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 823fdd1d51c4阅读 181评论 0 1
  • 曾经背着行囊 四处打工流浪 像水面浮动的萍 摇曳着咸涩的梦 海风瘦削了身体 侵蚀了魂灵 漂啊 漂啊 曾经抬头望着...
    蕙兰漱雪阅读 259评论 0 3
  • 习惯早起了,想睡个懒觉都没这个习惯了,幸好有小平底鞋陪伴我经过一个又一个橱窗,早晨起来浑身好疼,我和琼美女负责逛,...
    弘毅2018阅读 196评论 0 0