《深入理解ES6》第四章 扩展对象的功能

本文详细解读了ES6中对象类型的区分、对象字面量的简写语法提升、新增的Object.is()和Object.assign()方法,以及原型的增强和方法定义的严谨性。特别关注了重复属性处理、原型修改和super关键字的使用。
摘要由CSDN通过智能技术生成

第四章 扩展对象的功能

《深入理解ES6》—— Nicholas C. Zakas

1. 对象类型

  • 普通对象
  • 奇异对象
  • 标准对象
  • 内置对象

2. 对象字面量的扩展

2.1. 属性简写

当对象的属性名称与变量名相同时,可以简单书写名称,而省略冒号和值。

function createPerson( name,age ) {
    return {
        name: name,
        age: age
    }

    // 简写
    return { 
        name,
        age 
    };
}

2.2. 方法简写

改进了为对象字面量方法赋值的语法。省略了 冒号和关键字。

var person = {
    // 之前
    sleep: function() {},

    // 简写
    sayName() {}
}

2.3. 需计算属性名

对象字面量的属性名可以由表达式计算而来,这在ES5之前是不允许的。

var prefix = "我的是";

var person = {
    [prefix + "姓名"]: "吴钦飞",
    [prefix + "性别"]: "男"
}

3. 新的方法

3.1. Object.is() 方法

许多情况下, Object.is()的结果与严格相等运算符一致,
且弥补了 严格相等运算符 残留的怪异点:

+0 === -0;              //=> true
Object.is( +0 === -0 ); //=> false

NaN === NaN;            //=> false
Object.is( NaN, NaN );   //=> true

3.2. Object.assign() 方法

类似于 jQuery.extend( receiver, 供应者1, 供应者2, ...... )

浅拷贝

4. 重复的对象字面量属性

ES6移除了重复属性的检查。

"use strict";

var person = {
    name: "张三",

    // 在ES5严格模式下会出错,但在ES6下没问题,会覆盖前面的同名属性
    name: "吴钦飞"  
};

5. 自有属性的枚举顺序

自有属性枚举时基本顺序如下:

  • 1.数字类型键,按升序排列
  • 2.字符串类型键,按添加顺序排列
  • 3.符号类型键,按添加顺序排列

示例:

var obj = {
    a: 1,
    0: 1,
    c: 1,
    2: 1,
    b: 1,
    1: 1
}
Object.getOwnPropertyNames( obj ).join( " " );
//=> "0 1 2 a c b"

6. 更强大的原型

6.1. 修改对象的原型

ES6添加 Object.setPrototypeOf() 方法修改对象的原型。

对象的原型的实际值存储在一个内部属性[[Prototype]]上,
Object.getPrototypeOf() 方法可以返回该值,
Object.setPrototypeOf() 方法可以设置该值。

6.2. super 引用

super 是指向当前对象的原型的一个指针,
实际上就是 Object.getPrototypeOf( this ) 的值。

7. 正式的“方法”定义

在ES6之前,“方法”的概念从未被正式定义,它此前仅指对象的函数属性(而非数据属性)。

ES6则正式做出了定义:方法是一个拥有[[HomeObject]]内部属性的函数,
此内部属性指向该方法所属的对象。

let person = {
    // 方法
    say() { }
}

// 并非方法
function say() {}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值