你的位置:首页 > Java教程

[Java教程]ES5 的 setter 和 getter


有两种方式使用 setter 和 getter

 

1. set/get

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

 

2. Object.defineProperty

var person = {}var name = ''Object.defineProperty(person, 'name', {	configurable: true,	enumerable: true,	get: function() {		return name	},	set: function(n) {		name = n	}})// 测试person.name // undefind person.name = 'john' // 'john',此时全局的 name 也变成了 'john'

 

当然,通常用 setter 和 getter 来实现私有变量

// 私有变量var person = function() {	var _name = ''	var _age = 0	return {		get name() { return _name },		set name(n) { _name = n },		get age() { return _age },		set age(a) { _age = a }	}}()

 

或者

// 私有变量var person = function() {	var _name = ''	var _age = 0	var obj = {}	Object.defineProperty(obj, 'name', {		configurable: true,		enumerable: true,		get: function() {			return _name		},		set: function(n) {			_name = n		}	})	Object.defineProperty(obj, 'age', {		configurable: true,		enumerable: true,		get: function() {			return _age		},		set: function(a) {			_age = a		}	})		return obj}()

 

当然,setter 和 getter 最牛逼的用处是用来实现目前流行的 “双向绑定”,MVxx之类的库。不支持 setter 和 getter 的低版本浏览器则只能用轮询的方式来搞了。