对象文字表示法getter和setter:太多递归



我是用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);

这是怎么回事?

应该在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;
    }
};

最新更新