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

标签 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的值?

最佳答案

您在无限递归循环中使用 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 函数被一次又一次地调用,永不停止。

关于javascript - 无法使用 defineProperty 方法在对象中设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39348351/

相关文章:

javascript - CDN服务器更新非常频繁

javascript - html 代码上的图表和操作

javascript - 在快速路由上应用 jwt 不会引发错误

Javascript : Modifying Prototype doesn't affect existing Instances

javascript - 检测着陆页何时完全加载

javascript - 在angularJS中向数组添加另一个变量

javascript - Recaptcha 无效请求 cookie

javascript - Python 和 Selenium : What's a good way to access links hidden in dropdown menus built by Javascript?

javascript - WebGL 中 Uncaught Error : SECURITY_ERR: DOM Exception 18 When applying textures with Three. js

javascript - 数组推送仅添加一次数据