javascript setter、getter 方法中缺少 "this" 关键字
Missing "this" keyword in javascript setter, getter methods
我不小心在 setter、getter 方法中遗漏了这个关键字。它会导致一些奇怪的错误:(使用 Chrome、Firefox 测试)
案例 1:
let user = {
name: "John",
set fullName(value) {
name = value;
},
get fullName() {
return name;
}
};
user.fullName // ""
user.fullName = "Batman"
user.fullName // "Batman"
user.name // "John"
为什么 属性 name 仍然是 "John"? "Batman" 哪里来的?
案例2: 改变上面代码的变量名,发生了一些事情:
let user = {
anythingButName: "John",
set fullName(value) {
anythingButName = value;
},
get fullName() {
return anythingButName;
}
user.fullName // anythingButName is not defined at Object.get fullName [as fullName]...
};
除了 name 之外,不能为上述代码中的变量使用任何名称。不知道为什么?
两种情况都是一样的。会发生什么:
let user = {
name: "John",
set fullName(value) {
name = value;//sets window.name to *value*
},
get fullName() {
return name;//returns window.name
}
};
console.log(
user.fullName,// window.name is "" by default
window.name,
user.fullName = "Batman", //=> window.name
window.name,
user.fullName, // "Batman" ==window.name
user.name // "John" //what you really wanted
);
它 工作 (不是真的)只是 name 作为 window.name是默认值 属性,因此在开头设置为 ""。
您可以查看第二种情况:
console.log(
user.fullName, // undefined yet
user.fullName="test",
user.fullName // test
);
我不小心在 setter、getter 方法中遗漏了这个关键字。它会导致一些奇怪的错误:(使用 Chrome、Firefox 测试)
案例 1:
let user = {
name: "John",
set fullName(value) {
name = value;
},
get fullName() {
return name;
}
};
user.fullName // ""
user.fullName = "Batman"
user.fullName // "Batman"
user.name // "John"
为什么 属性 name 仍然是 "John"? "Batman" 哪里来的?
案例2: 改变上面代码的变量名,发生了一些事情:
let user = {
anythingButName: "John",
set fullName(value) {
anythingButName = value;
},
get fullName() {
return anythingButName;
}
user.fullName // anythingButName is not defined at Object.get fullName [as fullName]...
};
除了 name 之外,不能为上述代码中的变量使用任何名称。不知道为什么?
两种情况都是一样的。会发生什么:
let user = {
name: "John",
set fullName(value) {
name = value;//sets window.name to *value*
},
get fullName() {
return name;//returns window.name
}
};
console.log(
user.fullName,// window.name is "" by default
window.name,
user.fullName = "Batman", //=> window.name
window.name,
user.fullName, // "Batman" ==window.name
user.name // "John" //what you really wanted
);
它 工作 (不是真的)只是 name 作为 window.name是默认值 属性,因此在开头设置为 ""。 您可以查看第二种情况:
console.log(
user.fullName, // undefined yet
user.fullName="test",
user.fullName // test
);