Javascript 无法识别ES6 setter函数

Javascript 无法识别ES6 setter函数,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,我正在研究ES6的新语法,现在我正在查看get和set方法,在尝试使用set方法时遇到了一个错误 以下是一个例子: 班主任{ constructorfirstName,lastName{ this.firstName=firstName; this.lastName=lastName; } 获取全名{ 返回`${this.firstName}${this.lastName}`; } 设置全名…值{ this.firstName=firstName; this.lastName=lastName;

我正在研究ES6的新语法,现在我正在查看get和set方法,在尝试使用set方法时遇到了一个错误

以下是一个例子:

班主任{ constructorfirstName,lastName{ this.firstName=firstName; this.lastName=lastName; } 获取全名{ 返回`${this.firstName}${this.lastName}`; } 设置全名…值{ this.firstName=firstName; this.lastName=lastName; } } 设a=新人“人”,“a”; a、 全名'Person','B' console.loga;
getter和setter没有用作标准函数。根据MDN:

set语法将对象属性绑定到要调用的函数 当试图设置该属性时

您应该使用normal=赋值来调用setter,而不是将其作为函数调用

此外,setter只接受一个参数,不能使用其余参数。。。语法。您可以使用数组或对象,并使用解构赋值来实现这一点

班主任{ constructorfirstName,lastName{ this.firstName=firstName; this.lastName=lastName; } 获取全名{ 返回`${this.firstName}${this.lastName}`; } 设置全名[名字,姓氏]{ this.firstName=firstName; this.lastName=lastName; } } 设a=新人“人”,“a”; a、 全名=['Person','B'];
迪拉 getter和setter没有用作标准函数。根据MDN:

set语法将对象属性绑定到要调用的函数 当试图设置该属性时

您应该使用normal=赋值来调用setter,而不是将其作为函数调用

此外,setter只接受一个参数,不能使用其余参数。。。语法。您可以使用数组或对象,并使用解构赋值来实现这一点

班主任{ constructorfirstName,lastName{ this.firstName=firstName; this.lastName=lastName; } 获取全名{ 返回`${this.firstName}${this.lastName}`; } 设置全名[名字,姓氏]{ this.firstName=firstName; this.lastName=lastName; } } 设a=新人“人”,“a”; a、 全名=['Person','B'];
迪拉 这并不是全新的语法。这是ES6课程的一个变体

get/setproperty访问器的全部要点是,它们被定义为属性描述符并用作普通属性:

console.log(person.fullName);
person.fullName = 'Foo Bar';
它应该是:

set fullName(value) {
    const [firstName, lastName] = value.split(' ');
    this.firstName = firstName;
    this.lastName = lastName;
}
如果您想将其作为普通方法使用,那么将其定义为set setter是没有意义的。相反,它可以是

setFullName(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

这并不是全新的语法。这是ES6课程的一个变体

get/setproperty访问器的全部要点是,它们被定义为属性描述符并用作普通属性:

console.log(person.fullName);
person.fullName = 'Foo Bar';
它应该是:

set fullName(value) {
    const [firstName, lastName] = value.split(' ');
    this.firstName = firstName;
    this.lastName = lastName;
}
如果您想将其作为普通方法使用,那么将其定义为set setter是没有意义的。相反,它可以是

setFullName(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

您不能使用这样的setter,请参见下面的我的代码片段和

班主任{ constructorfirstName,lastName{ this.firstName=firstName; this.lastName=lastName; } 获取全名{ 返回`${this.firstName}${this.lastName}`; } 设置fullNamefname{ 设fn=fname.split“”; this.firstName=fn[0]; this.lastName=fn[1]; } } 设a=新人“人”,“a”; a、 全名='personb';
迪拉 您不能使用这样的setter,请参见下面的我的代码片段和

班主任{ constructorfirstName,lastName{ this.firstName=firstName; this.lastName=lastName; } 获取全名{ 返回`${this.firstName}${this.lastName}`; } 设置fullNamefname{ 设fn=fname.split“”; this.firstName=fn[0]; this.lastName=fn[1]; } } 设a=新人“人”,“a”; a、 全名='personb';
迪拉;全名getter有效吗?您应该阅读更多关于getter和setter的内容。您没有正确设置它们。具体来说,除非该属性是函数,否则调用该属性将无效。yes get method Works您选择的答案在技术上是正确的,但具有误导性。它包含糟糕的编码实践。全名getter有效吗?您应该阅读更多关于getter和setter的内容。您没有正确设置它们。具体来说,除非该属性是函数,否则调用该属性将无效。yes get method Works您选择的答案在技术上是正确的,但具有误导性。它包含糟糕的编码实践。这是真的,但传递数组毫无意义。他显然有语法错误。a、 全名'Person','B'。传递一个值数组以将多个值传递给setter是错误的,除非getter也返回一个数组。@AluanHaddad-getters/setters是在分配数据之前转换数据的能力,因此setter参数不必与结束值相同。但关键是这些参数是透明的,逻辑字段存取
是的。如果逻辑字段是可变的,即有一个setter,那么没有人会期望分配一个数组并返回一个字符串。对于任何接受1种或几种类型的参数并返回另一种类型的函数,您可以这样说。我只在需要验证数据或转换数据时才使用setter/getter。在非JS语言中,我使用了您描述的标准设置器。这是真的,但传递数组毫无意义。他显然有语法错误。a、 全名'Person','B'。传递一个值数组以将多个值传递给setter是错误的,除非getter也返回一个数组。@AluanHaddad-getters/setters是在分配数据之前转换数据的能力,因此setter参数不必与结束值相同。但关键是这些参数是透明的,逻辑字段访问操作。如果逻辑字段是可变的,即有一个setter,那么没有人会期望分配一个数组并返回一个字符串。对于任何接受1种或几种类型的参数并返回另一种类型的函数,您可以这样说。我只在需要验证数据或转换数据时才使用setter/getter。在非JS语言中,我使用了您描述的标准设置程序。可能值得添加get和set指定在读取或写入属性时调用的函数。术语属性描述符使用得不太正确,因为属性描述符不需要get或getset@AluanHaddad当然,他们被称为。属性描述符。这个问题故意针对ES6的问题,它不打算解释描述符是如何工作的,这是JS的常识,不是ES6特有的,有一些问题已经回答了,所以可以详细地解决描述符。@RobG抱歉,我没有注意到你评论中的普通方法备注。是的,你说得对。方法签名是从OP粘贴的,基本上应该是setFullNamefirstName,而不是lastName。@estus隐式调用它们。它们不使用调用语法。的确,这与ES6无关,它是在ES5中引入的,因此+1是这样,但是OP中的代码不理解getter和setter是如何工作的,因此确实需要解释。可能值得添加的是,get和set指定在读取或写入属性时调用的函数。术语属性描述符使用得不太正确,因为属性描述符不需要get或getset@AluanHaddad当然,他们被称为。属性描述符。这个问题故意针对ES6的问题,它不打算解释描述符是如何工作的,这是JS的常识,不是ES6特有的,有一些问题已经回答了,所以可以详细地解决描述符。@RobG抱歉,我没有注意到你评论中的普通方法备注。是的,你说得对。方法签名是从OP粘贴的,基本上应该是setFullNamefirstName,而不是lastName。@estus隐式调用它们。它们不使用调用语法。事实上,这与ES6无关,它是在ES5中引入的,因此+1用于此,但OP中的代码不理解getter和setter是如何工作的,因此需要对其进行解释。