对象字面量表示法 getter 和 setter:递归过多
Object literal notation getter and setter: too much recursion
我不熟悉使用 js 编写脚本并遵循 JavaMDN 的脚本指南。有些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 的上下文中引用私有变量,而不是引用相同的名称。与 public 名称相比,常见的模式是在每个局部变量前加上下划线。
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;
}
};
我不熟悉使用 js 编写脚本并遵循 JavaMDN 的脚本指南。有些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 的上下文中引用私有变量,而不是引用相同的名称。与 public 名称相比,常见的模式是在每个局部变量前加上下划线。
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;
}
};