在javascript setter,getter方法中缺少“this”关键字

时间:2017-06-27 12:31:37

标签: javascript getter-setter this-keyword

我在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"

为什么属性名称仍为“John”? “蝙蝠侠”来自哪里?

案例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 这个词。我不知道为什么?

1 个答案:

答案 0 :(得分:1)

两种情况都是平等的。会发生什么:

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 是默认属性,因此设置为"& #34;在开始。 你可以检查你的第二个案例:

console.log(
  user.fullName, // undefined yet
  user.fullName="test",
  user.fullName // test
);