无法使用defineProperty方法

时间:2016-09-06 11:49:39

标签: javascript

我已经使用javascript的defineProperty方法定义了一个对象并定义了一个属性。

var obj ={};
Object.defineProperty(obj,'b',{get:function(){
return 5},
set:function(value){
this.b = value}
});

但是当我使用以下语句

设置b的值时
obj.b = 25

它给了我

RangeError:超出最大调用堆栈大小

如何设置b的值?

1 个答案:

答案 0 :(得分:2)

你在无限递归循环中使用setter,setter中的代码再次使用它:

this.b = value; //this use setter of b again

将其更改为任何不同的变量名称,如:

this.bVal=value;

所有代码:

//example object
obj={};

Object.defineProperty(obj,'b',{
get:function(){
  return this.bVal;
},
set:function(value){
  this.bVal=value;
}
});

obj.b="Test text value of property b";
console.log(obj.b);

为什么以前的代码是无限循环?看看:

obj.b=12; //this code run set function

内部set功能是:

this.b=value; //this code also runs set function because this===obj

因此,set函数会一次又一次地被调用,并且永远不会停止。