数据属性
存储器属性
存储器属性不包含数据值,只包含包含 getter 和 setter 函数(非必需)。
getter负责查询值,它不带任何参数,setter则负责设置键值,值是以参数的形式传递,在他的函数体中,一切的return都是无效的。和普通属性不同的是,存储器属性在只声明了get或set时,对于读和写是两者不可兼得的,当它只拥有了getter方法,那么它仅仅只读,同样的,当它只有setter方法,那么您读到的永远都是undefined。如何声明对象存储器属性呢? 最快捷的途径就是利用对象字面量的语法来写了,请看下述一段代码:
1 | var oo = { |
定义一个已经声明的函数作为的getter和setter方法,使用Object.defineProperty
下面这个例子展示使用getter和setter方法扩展 Date原型,为预定义好的Date类添加一个year的属性。定义属性year的getter和setter方法用到了Date类中已存在的getFullYear和setFullYear方法。
定义属性year的getter和setter:1
2
3
4
5
6
7
8
9
10
11var d = Date.prototype;
Object.defineProperty(d, "year", {
get: function() { return this.getFullYear() },
set: function(y) { this.setFullYear(y) }
});
//通过一个Date对象使用getter和setter:
var now = new Date();
console.log(now.year); // 2017
now.year = 2030;
console.log(now);