gpt4 book ai didi

javascript - getter setter 超出最大调用堆栈大小错误

转载 作者:可可西里 更新时间:2023-11-01 01:47:40 24 4
gpt4 key购买 nike

我正在尝试学习 JavaScript 对象中的 get 和 set

function ab(n){this.name=n;}; 
var c= new ab("abcde");
console.log(c);
Object.defineProperty(c, 'name', {
get: function() {
return name;
},
set: function(Name) {
this.name = Name;
}
});
c.name="xyz";
console.log(c.name);

在这里,我首先使用构造函数创建对象,然后使用 get 和 set。但我收到错误“超出最大调用堆栈大小”。我没有得到 This Error 的原因。感谢帮助

最佳答案

我认为已经解释过了,setter 中的 this.name = Name 再次调用 setter,这将导致无限递归。

这个方法怎么样:

function Ab(_name){
Object.defineProperty(this, "name", {
//enumerable: true, //maybe?
get: function(){ return _name },
set: function(value){ _name = value }
});
}

var c = new Ab("abcde");
console.log(c, c.name);

或者原型(prototype)方法
缺点:私有(private)属性 _name 是公共(public)的

function Ab(n){
this.name = n;
}
Object.defineProperty(Ab.prototype, "name", {
get: function(){ return this._name },
set: function(value){ this._name = value }
});

或者 ES6
与原型(prototype)方法几乎相同

class Ab{
constructor(n){
this.name = n;
}

get name(){ return this._name },
set name(value){ this._name = value }
}

关于javascript - getter setter 超出最大调用堆栈大小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37502163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com