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方法报出了同样的错误,求大神解答
展开
 我来答
灵葬外与他29
2016-05-26 · TA获得超过2183个赞
知道小有建树答主
回答量:1221
采纳率:50%
帮助的人:947万
展开全部

你这个是因为你进入死循环了,以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;
            }
        }
    });
})();
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式