以下为JavaScript高级程序设计第六章面向对象的程序设计读书笔记记录。
对象存在两个属性: 数据属性/ 访问器属性。
数据属性包括四个值: Configurable: 默认值为true, 表示能否通过delete删除属性重新定义;能否修改属性特性,或者能否吧属性修改为访问器属性。
Enumable: 表示能否通过for in循环返回属性。默认值为true。
writable: 表示能否修改属性,默认值为true。
Value:包含这个属性的数据值。
访问器属性包括四个值:Configurable: 默认值为true, 表示能否通过delete删除属性重新定义属性;能否修改属性特性,或能否修改为数据属性。
Enumable: 表示能否通过for in循环返回属性, 默认值为true。
Get: 在读取属性时调用的函数,默认值为undefined.
Set: 在写入属性时调用的函数,默认值为undefined。
其中涉及到Object.defineProperty()/Object.defineProperties()/Object.getOwnPropertyDescriptor()等方法。
object.defineProperty(), 传入三个值,第一个为定义属性的对象,第二个为定义属性的对象属性,第三个为属性描述符。如下:
var obj = {};
Object.defineProperty(obj, ‘name‘, {value: ‘Tom‘});
object.defineProperties(), 传入两个值,可定义多个属性特性,第一个为定义属性的对象,第二个为定义属性特性的属性健值对,如下:
var obj = {};
Object.defineProperties(obj, {
_year: { value: 123}, // 属性添加‘_’前缀,表示该属性只能通过对象的访问器属性进行访问,即get()/set()方法。
name: {value: ‘Tom‘},
year: {
get: function(){
return this._year;
}
}
});
Object.getOwnPropertyDesciptor(), 表示获取某个属性的描述符(该数据属性或访问器属性),该方法传入两个参数,第一个表示属性所在的对象,第二个表示描述符的属性名称,返回值为一个对象。如下:
引用上述定义的obj对象,调用Object.getOwnPropertyDescrptor().
var descriptor = Object.getOwnPropertyDescriptor(obj, _year);
console.log(descriptor.value); // 输出123
console.log(descriptor.get); // 输出undefined
var descriptor2 = Object.getOwnPropertyDescriptor(obj, year);
console.log(descriptor.value); // 输出undefined
console.log(descriptor.get); // 输出function