1. 属性的简洁表示法

在ES6中 允许直接写入变量和函数,作为对象的属性和方法,使得代码的书写更为简洁。

const f = 'a'
const b = {f}
b  // {f: 'a'}等同于
const b = {f: f}
复制代码

在ES6中允许在对象内直接写变量,这时候属性名为变量名,属性值就是变量值

function u(x, y){return {x, y}
}// ====function u(x, y){return {x: x, y: y }
}u(1, 2)   // {x:1, y: 2}或者一下写法:function o() {const x = 1;const x = 2;return {x, y}
}
o() // {x:1, y:2}
复制代码

2. 属性名表达式

在JavaScript中属性名的表达式的方法有两种,一种 直接用标识符作为属性名,第二种用表达式作为属性名。第二种写的时候表达式要放在方括号之内

//一
obj.foo = true//二
obj['a' + 'bc'] = 123//三
let t = 'm'let obj = {[t]: true,['a' + 'bc']: 123
}
复制代码

表达式还可以用来定义方法名(注意:属性名表达式不能和简洁表示法同时使用)

let obj = {['h' + 'ello']() {return 'hi'}
}obj.hello() // hi
复制代码

如果属性名表达式是一个对象,则默认情况下会自动将对象转为字符串[object Object]

const ka = {a: 1}
const kb = {b: 2}const myObj = {[ka]: 'va',[kb]: 'vc'
}myObj // Object {[object Object]: 'vc'}
复制代码

3. 方法的 name 属性

函数的name 属性,返回函数名,对象方法也是函数,因此也由name 属性

const p = {n() {console.log('h')}
}p.n.name // n
复制代码

特殊情况 getter 和 setter 属性是在 get 和 set上面

const obj = {get foo() {},set fod() {}
}obj.foo.name // undefinedconst d = Object.getOwnPropertyDescriptor(obj, 'foo')d.get.name // get foo
d.set.name // set fod
复制代码

特殊情况 bind创造的函数 name 属性返回 bound 加上原有函数的名字

var do = function(){}
do.bind().name // bound do
复制代码

特殊情况 Function构造函数创造的函数,name 返回 anonymous

(new Function()).name // anonymous
复制代码

如果对象的方法是一个Symbol 那么name 返回这个 Symbol的描述

const k = Symbol('描述')
k.name // "[描述]"
复制代码

4. 属性的可枚举性和遍历

可枚举性

对象的每个属性都有一个描述对象,用来控制该属性的行为,Object.getOwnPropertyDescriptor 方法可以获取该属性的描述对象

let obj = {f: 234}
Object.getOwnPropertyDescriptor(obj, 'foo')
//  {
//    value: 234,
//    writable: true,
//    enumerable: true,
//    configurable: true
//  }
复制代码

描述对象的 enumerable 属性,称为 “可枚举性”,如果该属性为true就表示某些操作会忽略当前操作

有四个操作会忽略 enumerate 为 false 的属性- for...in循环: 只遍历对象自身和继承的可枚举的属性
- Object.keys():返回对象自身的所有可枚举的属性的键名
- JSON.stringify(): 只串行化对象自身的可枚举的属性
- Object.assign(): 忽略enumerable为false的属性,只
拷贝对象自身的可枚举的属性
复制代码

ES6中 所有class 的原型的方法都是不可枚举的

属性的遍历

ES6一共有5种方法可以遍历对象的属性。

(1)for...infor...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。(2)Object.keys(obj)Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。(3)Object.getOwnPropertyNames(obj)Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。(4)Object.getOwnPropertySymbols(obj)Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。(5)Reflect.ownKeys(obj)Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。 1)for..in以上五种方法遍历对象的键名,都遵循同样的属性遍历的次序股则首先遍历所有数值键,按照数值升序排列。其次遍历所有字符串键,按照加入时间升序排列。最后遍历所有 Symbol 键,按照加入时间升序排列。
复制代码

5. super关键字

this的关键字总是指向函数所在的当前对象,ES6 又新增了另一个类似的关键字 super,指向当前对象的原型对象

注意:super关键字表示原型对象时,只能用在对象的方法之中,用在其他他地方都会报错。

// 报错
const obj = {foo: super.foo
}// 报错
const obj = {foo: () => super.foo
}// 报错
const obj = {foo: function () {return super.foo}
}
复制代码

上面三种super的用法都会报错,因为对于 JavaScript 引擎来说,这里的super都没有用在对象的方法之中。第一种写法是super用在属性里面,第二种和第三种写法是super用在一个函数里面,然后赋值给foo属性。目前,只有对象方法的简写法可以让 JavaScript 引擎确认,定义的是对象的方法。

欢迎关注 公众号【小夭同学】

ES6入门系列

ES6入门之let、cont

ES6入门之变量的解构赋值

ES6入门之字符串的扩展

ES6入门之正则的扩展

ES6入门之数值的扩展

ES6入门之函数的扩展

ES6入门之数组的扩展

Git教程

前端Git基础教程

ES6入门之对象的扩展相关推荐

  1. ES6入门之对象扩展

    ES5对象(超类)原有: 属性:construct构造函数 方法: object.hasOwnProperty( propertyName ) //检测是否有一个本地的属性而不是继承的,返回boole ...

  2. ES6 数组、对象的扩展

    8. 数组的扩展 扩展运算符(...),将一个数组转为用逗号分隔的参数序列. 复制数组 const a2=[...a1] 合并数组 [...arr1, ...arr2, ...arr3]; arr1. ...

  3. 【ES6】阮一峰ES6学习(四) 对象的扩展

    对象的扩展 1. 属性的简洁表示法 ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; ...

  4. ECMA2015(ES6)简单入门-9-对象-对象的扩展-对象的新增方法

    对象的创建 使用Object构造函数来创建一个对象 使用对象字面量创建一个对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 本身也有缺陷,就是实例共享了引用类型friends,从下面的代 ...

  5. ES6 入门教程 9 数组的扩展 9.1 扩展运算符

    ES6 入门教程 ECMAScript 6 入门 作者:阮一峰 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 ES6 入门教程 9 数组的扩展 9.1 扩展运算符 9.1.1 含义 9.1 ...

  6. JavaScript从入门到放弃 - ES6中的对象和类

    重点讲解Tab栏切换.增.删.改 1. 面向过程与面向对象 2.ES6 中的对象与类 2.1 对象 2.2 类 2.2.1 创建类 2.2.1.1 语法 2.2.1.2 实例 2.2.2 类创建添加属 ...

  7. [ES6] 细化ES6之 -- 对象的扩展

    对象的属性 属性表示法 ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法 ES5 let name = "张无忌"; function sayMe() {cons ...

  8. es6调用c语言sdk,ES6 关于对象的扩展-contracts-WinFrom控件库|.net开源控件库|HZHControls官网...

    今天来简单说下ES6 中对象的扩展 首先回顾传统的对象表示法 let person={ 'name':'zhang', 'age':'20', 'play':function(){ alert('pl ...

  9. es6 内置对象扩展rest, Arry 扩展方法Array.from(),find(), findIndex(),includes()

    1.es6内置对象扩展rest实参 2.  Arry 扩展方法    (1)构造函数方法:Array.from()   (2) find()   (3) findIndex()   (4)includ ...

最新文章

  1. C++_STL标准库——容器
  2. 人工智能浪潮褪去,冲刺IPO成AI企业生存关键?
  3. set firefox new tab url
  4. Nilearn教程系列(4)-fMRI解码入门教程(一)
  5. 深圳python如何评价_Python分析18万条《八佰》影评,看看观众怎么说?
  6. 字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...
  7. Java 类主动引用和被动引用
  8. 无人驾驶(在apollo中添加新车辆)
  9. python交叉编译环境_交叉编译Python
  10. python 服务监控_promethues + python + flask监控后端服务状态
  11. 知行:程序员如何保持二者的平衡
  12. c编译动态库和静态库流程
  13. html文字抖动效果,CSS实现TikTok文字抖动效果示例
  14. win10系统编辑服务器在哪个文件夹,文件夹选项在哪里,小编教你Win10文件夹选项在哪...
  15. 从诺贝尔奖到“吃鸡守护者”:通往极点的手机散热战争
  16. 长尾分布之DECOUPLING REPRESENTATION AND CLASSIFIER FOR LONG-TAILED RECOGNITION
  17. CAD下载的流程,具体步骤是什么样的呢?
  18. Windows PowerShell清除历史命令执行记录
  19. 创造与魔法服务器维护一维护是多久,创造与魔法 | 维护完快速进服指南必刷稀有物介绍...
  20. fc游戏模拟器PHP源码,FC模拟器合集 - 经典怀旧 - 虎纹猫家园☆2021 - Powered by Discuz!...

热门文章

  1. java与C#对比文章阅读
  2. 【JQuery】数据
  3. 路由器连接宽带(成功上网步骤方法)
  4. 我和ASP.NET MVC有个约会
  5. maven笔记(2)-- 构建Java Project 及 Maven命令使用
  6. ffmpeg编译的静态链接库问题
  7. php url路径问题和php文件以绝对路径引入
  8. IOS Animation-KeyPath值
  9. Codeforces 484E Sign on Fence(是持久的段树+二分法)
  10. UILabel小技巧