首页 > 解决方案 > 创建对象时函数关键字是可选的吗?

问题描述

       let username = {
            
            name: 'John Smith',
            yearBorn: 2001,
            
            age (){
                
                return 2020 - this.yearBorn;
                
                
            }
            
        }
        
        
    console.log(username.age());

如您所见,我在这里没有使用函数表达式,也没有使用 function 关键字执行标准函数,但它工作得非常好!

在创建 JS 对象时假设 function 关键字是可选的是否安全?

标签: javascript

解决方案


这(使用函数表达式进行属性初始化):

let username = {
    age: function() {
    }
};

这(方法语法):

let username = {
    age() {
    }
};

做些稍有不同的事情,但通常你并不关心差异。

使用函数和方法语法的属性初始值设定项之间存在一些差异:

  • 使用方法语法,方法中的代码可以使用super关键字访问其原型对象上的内容。使用函数表达式初始化程序执行属性时,它不能。方法语法super通过将您创建方法的对象附加到方法上作为规范中称为 [[HomeObject]] 的内部字段启用(您无法访问内部字段);然后super.x查找 [[HomeObject]] 的当前原型并x对其进行访问。
  • 使用方法语法,生成的函数只是一个函数/方法,而不是构造函数。使用上面的第一个代码块,您可以new username.age()创建一个对象;第二个,你不能。(并且由于它们不是构造函数,因此方法没有prototype分配给它的大部分为空的对象的属性。)

方法语法是在 ES2015 中引入的。它存在于所有现代浏览器中,而不是像 Internet Explorer(甚至 IE11)这样的过时浏览器中。


推荐阅读