Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获的SyntaxError:Setter必须只有一个形式参数_Javascript_Setter - Fatal编程技术网

Javascript 未捕获的SyntaxError:Setter必须只有一个形式参数

Javascript 未捕获的SyntaxError:Setter必须只有一个形式参数,javascript,setter,Javascript,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; } };

我试图理解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;
    }
};
未捕获的SyntaxError:Setter必须只有一个形式参数

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 };

(就我个人而言,我更倾向于使用解构赋值,但它会起作用。)

当您赋值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"

尝试设置newYear和不设置newYear,同样的设置getNewYear和not get newYear。

实际上,也许解构赋值不能做到这一点,是吗?我感觉像是那种你记不起“节奏”这个词是不是真的时候。在这种情况下,我不使用属性,只使用一个名为
setNewYear(y,e)
的方法。我不太明白,但像那样的二传手似乎不是他们通常使用的方式。我也想到了一个解构任务,但不知道如何在这种情况下使用它。@JuanMendes是的,我同意,我不会这么做。我只是设计了一个例子。这是一个很好的例子,说明了如何使用setter/getter,但你需要通过提供一些解决方案将其与实际问题联系起来。你应该设置参数,而不是两个。