js对象,set和get方法 的三种实现形式

时间:2023-03-09 06:12:06
js对象,set和get方法 的三种实现形式
   var obj1 = {
name: 'shaanxi',
get nameGet() {
return this.name + 'a';
},
set nameSet(name) {
this.name = name;
}
}; console.info(obj1.nameGet); //shaanxia
obj1.nameSet = 'set by set keywords';
console.info(obj1.nameGet); //set by set keywordsa

第一种方式,直接在对象内设置。如代码所示。

   var obj2 = {
name: 'shaanxi'
}; obj2.__defineGetter__('nameGet', function() {
return this.name;
});
obj2.__defineSetter__('nameSet', function(
name) {
this.name = name;
});
var ref1 = obj2.__lookupGetter__('nameGet');
var ref2 = obj2.__lookupSetter__('nameSet');
console.info(obj2.nameGet); //shaanxi
obj2.nameSet = 'set by __defineSetter__';
console.info(obj2.nameGet); //set by __defineSetter__

第二种方式:使用原型方法进行设置

  var obj3 = {
name: "shaanxi"
};
Object.defineProperties(obj3, {
nameGet: {
value: function() {
return this.name;
}
},
nameSet: {
value: function(name) {
this.name = name;
}
}
}); console.info(obj3.nameGet()); //shaanxi
obj3.nameSet('set by Object.defineProperty');
console.info(obj3.nameGet()); //set by Object.defineProperty

第三种方式:使用Object.defineProperty()和Object.defineProperties()进行设置