JavaScript中匿名对象能否使用?直接调用其方法为何报错?
匿名对象直接调用方法的语法问题解析
这种直接调用匿名对象方法的用法并非不被允许,问题出在JavaScript的语法解析规则上:
- 当代码以
{开头时,JavaScript解析器默认会将其识别为代码块的起始标记,而非对象字面量。所以{greet(){console.log('hello');}}会被解析成一个包含函数声明的代码块,后续的.greet()就会因语法逻辑冲突抛出错误。 - 访问匿名对象属性时(如
{name: 'fred'}.name),解析器会根据后续的.name判断前面的{}不可能是代码块,因此会将其当作对象字面量处理,所以能正常运行。 - 赋值给变量的场景下(
const greeter = {greet(){...}}),等号右侧必须是表达式,解析器自然会把{}识别为对象字面量,调用方法也就没问题了。
要让匿名对象直接调用方法生效,只需用括号包裹对象字面量,强制解析器将其当作表达式处理:
({greet(){console.log('hello');}}).greet();
内容的提问来源于stack exchange,提问作者twisted
相关产品推荐
相关产品推荐

