我使用javascript的defineProperty方法定义了一个对象和一个属性。
var obj ={};
Object.defineProperty(obj,'b',{get:function(){
return 5},
set:function(value){
this.b = value}
});但是当我使用下面的语句设置b的值时
obj.b = 25它让我
RangeError:超过的最大调用堆栈大小
如何设置b的值?
发布于 2016-09-06 11:58:15
在无限递归循环中使用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函数一次又一次地被调用,并且永不停止。
https://stackoverflow.com/questions/39348351
复制相似问题