gpt4 book ai didi

javascript - 为什么用 ES5 表达的带有 set 关键字和函数的 setter 会抛出语法错误?

转载 作者:行者123 更新时间:2023-11-29 20:37:19 25 4
gpt4 key购买 nike

为什么定义 setter 会在函数以 ES5 方式表达时抛出语法错误,但在以 ES6 表达时却有效。

具有 ES5 语法的 Setter(不起作用)

var person = {
firstName: "John",
lastName : "Doe",
language : "",
set setLanguage: function(val) {
this.language = val
},
get getLanguage() {
return this.language
}
}

person.setLanguage = 'EN'
person.getLanguage
`Uncaught SyntaxError: Unexpected token :`

具有 ES6 语法的 Setter(有效)

var person = {
firstName: "John",
lastName : "Doe",
language : "",
set setLanguage(val) {
this.language = val
},
get getLanguage() {
return this.language
}
}

person.setLanguage = 'EN'
person.getLanguage

谢谢

最佳答案

你的第二个例子不是 ES6 特定的,它是有效的 ES5 语法:

set setLanguage(val) {
this.language = val;
},

来自 Object Initialiser's specification (ES5)

PropertyAssignment :
PropertyName : AssignmentExpression
get PropertyName ( ) { FunctionBody }
set PropertyName ( PropertySetParameterList ) { FunctionBody }

如您所见,在PropertyName 之后有一个:,但是在getter 中没有:function或二传手

更新:

您可能混淆了计算属性名称getters/setters

ES6 introduced计算的属性名称,因此您可以这样做(此代码段可能不适用于 IE 等较旧的浏览器):

const person = {
language: "",
setLanguage(val){
this.language = val;
},
getLanguage(){
return this.language;
}
}

person.setLanguage("EN");

console.log("person.language", person.language);
console.log("person.getLanguage()",person.getLanguage())

请注意缺少 setget 关键字,您必须调用 person.setLanguage("EN"); 而不是 person.setLanguage = "EN";

在 ES5 中,您必须(将 const 更改为 var 并)使用:

setLanguage: function(val) {
this.language = val;
},
getLanguage: function() {
return this.language;
},

关于javascript - 为什么用 ES5 表达的带有 set 关键字和函数的 setter 会抛出语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56443319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com