未捕获的语法错误:Setter 必须只有一个形式参数

新手上路,请多包涵

我试图了解 JS 上的 getter 和 setter,但我似乎无法通过此错误。任何人都可以提供关于为什么我会收到此错误的任何见解吗?

 var book = {
    year: 2004,
    edition:1,
    get newYear(){
        return "Hello, it's " + this.year;
    },
    set newYear(y, e){
        this.year = y;
        this.edition = e;
    }
};

未捕获的语法错误:Setter 必须只有一个形式参数

原文由 Dinna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 370
2 个回答

当您分配 setter 代表的值时,将调用 setter 函数:

 var obj = {
  set a(newVal) { console.log("hello"); }
}
obj.a = 1; // will console log "hello"

如您所见,setter 接受多个参数没有意义,但它使您可以在设置值之前自由地操作该值:

 var person = {
  surname: "John",
  lastname: "Doe",
  get fullname() {
    return this.surname + " " + this.lastname;
  },
  set fullname(fullname) {
    fullname = fullname.split(' ');
    this.surname = fullname[0];
    this.lastname = fullname[1];
  }
};

console.log(person.fullname); // "John Doe"
person.fullname = "Jane Roe";
console.log(person.surname); // "Jane"
console.log(person.lastname); // "Roe"

原文由 Andreas Louv 发布,翻译遵循 CC BY-SA 3.0 许可协议

setter 函数是在您执行以下操作时隐式调用的函数:

 someObject.property = 25;

因为赋值操作只涉及分配一个值,所以 setter 函数必须有一个参数。无论如何,它只会被调用(通过隐式赋值机制)一个参数,所以两个参数的 setter 没有什么意义。

在您的情况下,您可以让您的二传手获取一个对象并从中获取两个值:

 var book = {
    year: 2004,
    edition:1,
    get newYear(){
        return "Hello, it's " + this.year;
    },
    set newYear(value){
        this.year = value.y;
        this.edition = value.e;
    }
};

然后你可以说

book.newYear = { y: 2005, e: 2 };

(我个人认为我更愿意通过解构赋值来做到这一点,但它会起作用。)

原文由 Pointy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题