【问题标题】:Missing "this" keyword in javascript setter, getter methodsjavascript setter、getter 方法中缺少“this”关键字
【发布时间】:2017-11-30 12:18:35
【问题描述】:

我不小心在 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”? “蝙蝠侠”从何而来?

案例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这个词之外,上面代码中的变量不能使用任何名称。不知道为什么?

【问题讨论】:

  • console.log(window.name);

标签: javascript getter-setter this-keyword


【解决方案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
);

works(不是真的)只是 name 因为 window.name 是默认属性,因此在开头设置为 "" . 您可以检查您的第二种情况:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 2013-07-09
    • 2022-11-20
    • 2019-05-14
    • 2011-04-14
    • 2017-09-09
    • 1970-01-01
    • 2013-05-04
    相关资源
    最近更新 更多