首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用defineProperty方法在对象中设置属性

无法使用defineProperty方法在对象中设置属性
EN

Stack Overflow用户
提问于 2016-09-06 11:49:38
回答 1查看 169关注 0票数 1

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

代码语言:javascript
复制
var obj ={};
Object.defineProperty(obj,'b',{get:function(){
return 5},
set:function(value){
this.b = value}
});

但是当我使用下面的语句设置b的值时

代码语言:javascript
复制
obj.b = 25

它让我

RangeError:超过的最大调用堆栈大小

如何设置b的值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-06 11:58:15

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

代码语言:javascript
复制
this.b = value; //this use setter of b again

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

代码语言:javascript
复制
this.bVal=value;

所有代码:

代码语言:javascript
复制
//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);

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

代码语言:javascript
复制
obj.b=12; //this code run set function

set函数内部是:

代码语言:javascript
复制
this.b=value; //this code also runs set function because this===obj

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39348351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档