属性类型
ECMAScript中有两个属性:数据属性和访问器属性。
访问器属性不包含数据值;他们包含一对getter和setter函数(非必须)。在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性中会调用getter函数并传入新值,这个函数负责决定如何处理数据。
// getters和setters
var person = {
firstName: '张',
lastName: '三',
get fullName() {
return this.firstName + this.lastName
},
set fullName(fullName) {
let [firstName, lastName] = fullName.split(',')
this.firstName = firstName
this.lastName = lastName
}
}
console.log(person.fullName)
person.fullName = '李,四'
console.log(person.fullName);
打印结果:
要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()方法。这个方法接收三个参数:属性所在的对象、属性的名字、和一个描述符对象。
// 使用构造函数
function pserson(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName
}
var fullName = new pserson('赵', '六')
Object.defineProperty(fullName, 'info', {
get: function() {
return this.firstName + ' ' + this.lastName
},
set: function(info) {
let [firstName, lastName] = info.split(' ')
this.firstName = firstName
this.lastName = lastName
}
})
console.log(fullName.info)
fullName.info = '李 五'
console.log(fullName.firstName)
打印结果:
更多详情请看JavaScript高级程序设计(红宝书)P139 第6章6.1.1属性类型