博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有关getter 和 setter的使用
阅读量:6761 次
发布时间:2019-06-26

本文共 2268 字,大约阅读时间需要 7 分钟。

什么是getter 和 setter ?

getter: 读取对象属性时将被调用的函数。

setter:设置对象属性时被调用的函数。

有以下4中方式可以使用 setter 和 getter:

1. 对象初始化器set/get 关键字

使用get/set关键字为属性添加一个函数,函数名即为属性名,get函数不传参,set函数传入的参数为设置对象的新值。

例如:

var person = {    _name: '',    get name() { return this._name },    set name(newName) { this._name = newName }} // 测试person.name // ''person.name = 'john' // 'john', 此时 person._name 也变成了 'john'

2. Object.defineProperty()

Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。

语法:

Object.defineProperty(obj, prop, descriptor)

参数:

obj:

需要定义属性的对象。

prop:

需被定义或修改的属性名。

descriptor:

需被定义或修改的属性的描述符。
var person = {}var name = ''Object.defineProperty(person, 'name', {    configurable: true,    enumerable: true,    get: function() {        return name    },    set: function(newName) {        name = newName    }}) // 测试person.name // undefindperson.name = 'john' // 'john',此时全局的 name 也变成了 'john'

3. Object.defineProperties()

在一个对象上添加或修改一个或多个自由属性。

用法类似Object.defineProperty()

语法

Object.defineProperties(obj, props)

参数

obj:将要被添加属性或修改属性的对象      props:     该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置
var obj = {a:1,b:"string"};    Object.defineProperties(obj,{        "A":{            get:function(){return this.a+1;},            set:function(val){this.a = val;}        },        "B":{            get:function(){return this.b+2;},            set:function(val){this.b = val}        }    });    //测试    obj.A; //2    obj.B; // "string2"    obj.A = 3;    obj.B = "hello";    obj.A; // 4    obj.B; // "hello2"

4. Object.create()

Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象。即提供新创建的对象的__proto__。

语法

Object.create(proto, [ propertiesObject ])

参数

proto:新创建对象的原型对象
propertiesObject:可选。新创建对象的可枚举属性对象的属性描述符以及相应的属性名称,这些属性对应Object.defineProperties()的第二个参数。

var o = null;    o = Object.create(Object.prototype,//指定原型为 Object.prototype            {                bar:{                    get :function(){                        return 10;                    },                    set : function (val) {                        console.log("Setting `o.bar` to ",val);                    }                }            }//第二个参数        );//测试    o.bar; //10    o.bar = 12; // 控制台打印出:"Setting `o.bar` to  12"

如果你希望对象属性值只能读取不能被修改,那么可以不设置set函数。

目前流行的框架Vue的响应式系统就是利用Object.defineProperty() 设置getter/setter来追踪数据变化,从而导致视图更新。

转载地址:http://elbeo.baihongyu.com/

你可能感兴趣的文章
NSCharacterSet 去除NSString中的空格
查看>>
ubuntu server 使用parted分区
查看>>
自定义网页日历
查看>>
solr实现满足指定距离范围条件的搜索
查看>>
ubuntu vsftp安装
查看>>
[转载]Web前端研发工程师编程能力飞升之路
查看>>
Redis
查看>>
XINS 3.0 正式版发布,远程 API 调用规范
查看>>
sqlserver 2005 64bit express
查看>>
(转)Oracle中For和while及一些应用
查看>>
jQuery基础及选择器
查看>>
DragonFly BSD 3.2 发布
查看>>
Mozilla 发布 Popcorn Maker,在线创作视频
查看>>
C#中为什么需要装箱拆箱操作?
查看>>
PHP类中一般方法与静态方法的疑问
查看>>
[转]PHP花括号变量
查看>>
【Opencv学习】摄像头采集、录像、截图小工具
查看>>
Fedora16安装中文语言包和中文输入法
查看>>
Windows 8实用窍门系列:14.windows 8中粘贴板(剪切板)的使用
查看>>
长连接API小心“窜包”问题
查看>>