属性类型 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属性类型