javascript中,设置访问器属性时,堆栈溢出的问题
varperson={name:"Rainn",age:25}Object.defineProperties(person,{name:{get:function(){r...
var person = {
name : "Rainn",
age : 25
}
Object.defineProperties(person,{
name : {
get : function(){
return "hello! I'm " + this.name;
},
set : function(newValue){
this.name = newValue + "(changed)";
}
},
age : {
get : function(){
return "18 forever";
},
set : function(newValue){
this.age -= 1;
}
}
});
这里在name中的get方法, return "hello! I'm " + this.name 这里报出了堆栈溢出的错误,如果改成了return "hello" 就可以了,但是age的set方法报出了同样的错误,求大神解答 展开
name : "Rainn",
age : 25
}
Object.defineProperties(person,{
name : {
get : function(){
return "hello! I'm " + this.name;
},
set : function(newValue){
this.name = newValue + "(changed)";
}
},
age : {
get : function(){
return "18 forever";
},
set : function(newValue){
this.age -= 1;
}
}
});
这里在name中的get方法, return "hello! I'm " + this.name 这里报出了堆栈溢出的错误,如果改成了return "hello" 就可以了,但是age的set方法报出了同样的错误,求大神解答 展开
展开全部
你这个是因为你进入死循环了,以name属性为例,你name属性的get访问器的代码是:
return "hello! I'm " + this.name;
此时return中包含this.name,而这个this.name又会再次进入你的get访问器,然后又发现有name又进入你的访问器,死循环直到内存溢出,你的age属性的set访问器一样的道理,改成下面这样就可以了。
var person = { };
(function () {
var _name = "Rainn", _age = 25;
Object.defineProperties(person, {
name: {
get: function () {
return "hello! I'm " + _name;
},
set: function (newValue) {
_name = newValue + "(changed)";
}
},
age: {
get: function () {
return "18 forever";
},
set: function (newValue) {
_age -= 1;
}
}
});
})();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询