访问描述符
概念
- 当你给一个属性定义setter或者getter,或者两者都有时,这个属性会被定义为“访问描述符”。
- 对于访问描述符来说,Javascript会忽略他们的value和writable特性。取而代之的是set和get函数。
- get: 在读取属性时,调用的函数。在读取属性时调用的函数。只指定get则表示属性为只读属性。默认值为undefined。
- 注意,get属性只有在调用它掌控的属性的时候,才会被调用该get方法的。
- set: 在写入属性时调用的函数。在写入属性时调用的函数。只指定set则表示属性为只写属性。默认值为undefined。
var obj2 = {};
Object.defineProperties(obj2,
{'wife2':
{get : function () {return 'lbb';}},
'wife3':{value:'zdy'}
}
);
obj2.wife2 = 'zly';
obj2.wife3 = 'zly';
console.log(obj2);
console.log(obj2.wife2);
console.log(Object.getOwnPropertyDescriptor(obj2, 'wife2'));
console.log(Object.getOwnPropertyDescriptor(obj2, 'wife3'));
var obj2 = {};
Object.defineProperties(obj2,
{'wife2':
{get :
function () {return 'lbb';}
,set :
function (data) {
console.log(data);
}
},
'wife3':{value:'zdy',writable:true}
}
);
console.log(obj2.wife2);
obj2.wife2 = 'chenhao';
console.log(obj2.wife2);
var obj2 = {};
Object.defineProperties(obj2,
{'wife2':
{get : function () {
this.value = 80;
return this.value;
}
,set : function (data) {
console.log(data);
this.value = data;
}
},'wife3':{value:'zdy',writable:true}
}
);
console.log(obj2.wife2);
obj2.wife2 = 'chenhao';
console.log(obj2.wife2);
var obj2 = {wname:'xiannv1',wname2:'xiannv2'};
Object.defineProperties(obj2,
{'wife2':
{get : function () {
return this.wname;
}
,set : function (data) {
console.log(data);
this.wname = data;
}
}}
);
console.log(obj2.wife2);
obj2.wife2 = 'chenhao';
console.log(obj2.wife2);