javascript - 创建对象时函数关键字是可选的吗?
问题描述
let username = {
name: 'John Smith',
yearBorn: 2001,
age (){
return 2020 - this.yearBorn;
}
}
console.log(username.age());
如您所见,我在这里没有使用函数表达式,也没有使用 function 关键字执行标准函数,但它工作得非常好!
在创建 JS 对象时假设 function 关键字是可选的是否安全?
解决方案
这(使用函数表达式进行属性初始化):
let username = {
age: function() {
}
};
这(方法语法):
let username = {
age() {
}
};
做些稍有不同的事情,但通常你并不关心差异。
使用函数和方法语法的属性初始值设定项之间存在一些差异:
- 使用方法语法,方法中的代码可以使用
super
关键字访问其原型对象上的内容。使用函数表达式初始化程序执行属性时,它不能。方法语法super
通过将您创建方法的对象附加到方法上作为规范中称为 [[HomeObject]] 的内部字段启用(您无法访问内部字段);然后super.x
查找 [[HomeObject]] 的当前原型并x
对其进行访问。 - 使用方法语法,生成的函数只是一个函数/方法,而不是构造函数。使用上面的第一个代码块,您可以
new username.age()
创建一个对象;第二个,你不能。(并且由于它们不是构造函数,因此方法没有prototype
分配给它的大部分为空的对象的属性。)
方法语法是在 ES2015 中引入的。它存在于所有现代浏览器中,而不是像 Internet Explorer(甚至 IE11)这样的过时浏览器中。
推荐阅读
- node.js - 如何使用 Jest 在 Nodejs 中模拟 Amazon DynamoDB v3?
- opengl - 使用 glslang 使用扩展验证 GLSL 着色器
- json - How to extract string from link in JSON response body; POSTMAN
- java - 什么可能导致此哈希码循环休眠错误?
- azure-active-directory - 用于 REST API 的 Azure Active Directory MFA
- ajax - WordPress admin-ajax 慢/问题
- google-data-studio - 问题数据工作室汇总 2 个指标来源
- arrays - 有没有办法将 3 维数组从 CPLEX 写入 Excel?
- oauth - OAuth 使用 client_id 和客户端密钥进行令牌请求,它安全吗?
- sql-server - 使用区分大小写的难以理解的差异