对象文字符号getter和setter:递归过多

时间:2015-09-22 08:50:14

标签: javascript javascript-objects

我不熟悉使用js编写脚本并遵循MDN的JavaScript指南。我无法轻易理解一些js概念。

尝试了以下代码(来自Java背景),但是浏览器提供了太多的递归错误。

//jshint esnext: true
console.clear();

var student = {
    get name() {
        return this.name;
    },

    set name(value) {//Should we not use same name as local variable?
        this.name = value;
    },

    get age() {
        return this.age;
    },

    set age(value) {
        this.age = value;
    }
};

var mike = Object.create(student);
console.log(mike.age);
console.log(mike.name);

mike.age = 29;
console.log(mike.age);

mike.name = "JS";
console.log(mike.name);

这有什么问题?

1 个答案:

答案 0 :(得分:7)

您应该在getter和setter的上下文中引用私有变量,而不是引用相同的名称。与公共名称相比,一种常见的模式是为每个局部变量添加下划线。

var student = {
    get name() {
        return this._name;
    },

    set name(value) {//Should we not use same name as local variable?
        this._name = value;
    },

    get age() {
        return this._age;
    },

    set age(value) {
        this._age = value;
    }
};