美文网首页
ES6(四)扩展的对象功能2

ES6(四)扩展的对象功能2

作者: 蒋小花_4b6c | 来源:发表于2020-05-16 13:15 被阅读0次

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

2.自有属性的枚举顺序

3.修改对象的原型

4.正式的方法定义

5.总结

重复的对象字面量属性

ES5 严格模式为重复的对象字面量属性引入了一个检查,若找到重复的属性名,就会抛出错

误。

ES5:

"use strict"; 

ES5:

var person = {

    name: "Nicholas",

    name: "Greg"    // 在 ES5 严格模式中是语法错误

};

ES6 移除了重复属性的 检查,严格模式与非严格模式都不再检查重复的属性。当存在重复属性时,排在后面的属性 的值会成为该属性的实际值.

"use strict";

var person = {

    name: "Nicholas",

    name: "Greg"    // 在 ES6 严格模式中不会出错

};

console.log(person.name); // "Greg"

自有属性的枚举顺序

ES5 并没有定义对象属性的枚举顺序,而是把该问题留给了 JS 引擎厂商。

而 ES6 则严格定义了对象自有属性在被枚举时返回的顺序

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

1.  所有的数字类型键,按升序排列。

2.  所有的字符串类型键,按被添加到对象的顺序排列。

3.  所有的符号类型键,也按添加顺序排列。

for-in 循环的枚举顺序仍未被明确规定,

因为并非所有的 JS 引擎都采用相同的方式。

而 Object.keys()  和 JSON.stringify() 

也使用了与 for-in  一样的枚举顺序

var obj = {

    a: 1,

    0: 1,

    c: 1,

    2: 1,

    b: 1,

    1: 1

};

obj.d = 1;

console.log(Object.getOwnPropertyNames(obj).join("")); // 012acbd

修改对象的原型

let person = {

    getGreeting() {

        return "Hello";

    }

};

let dog = {

    getGreeting() {

        return "Woof";

    }

};

// 原型为 person

let friend = Object.create(person); // 创建一个对象

console.log(friend.getGreeting()); // "Hello"

console.log(Object.getPrototypeOf(friend) === person);  // true 任意指定对象中获取其原型

// 将原型设置为 dog

Object.setPrototypeOf(friend, dog);

// 此方法允许你修改任意指 定对象的原型。

// 它接受两个参数:需要被修改原型的对象,以及将会成为前者原型的对象。

console.log(friend.getGreeting());  // Woof

console.log(Object.getPrototypeOf(friend) === dog); // true

正式的方法定义

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

 ES6 则正式做出了定义:方法是一个拥有[[HomeObject]] 内部属性的函数,

let person = {

    // 方法

    getGreeting() {

    return "Hello";

    }

};

// 并非方法

function shareGreeting() {

    return "Hi!";

}

总结

对象是 JS 编程的中心。

相关文章

  • ES6(四)扩展的对象功能2

    1.重复的对象字面量属性 2.自有属性的枚举顺序 3.修改对象的原型 4.正式的“方法”定义 5.总结 重复的对象...

  • 四: ES6 对象扩展

    前言 该部分为书籍 深入理解ES6 第四章(扩展的对象功能)笔记 对象类别 对象类别包括: 普通对象: 拥有 JS...

  • ES6学习笔记二 (扩展对象的功能性、解构、Symbol)

    第四章 扩展对象的功能性 1. 对象字面量语法扩展 直接看例子 ES6中通过属性初始化的简写语法,可以消除这种属性...

  • ES6(四)扩展的对象功能1

    1.对象类别(普通、标准、内置) 2.对象字面量语法的扩展 (属性名与值相同可以只写一个; 对象里面的方法简写...

  • 2018-08-24

    ES6对象的扩展

  • es6之扩展运算符 三个点(...)

    es6之扩展运算符 三个点(...)对象的扩展运算符数组的扩展运算符总结es6之扩展运算符 三个点(…)对象的扩展...

  • ES6扩展归纳

    ES6扩展归纳 介绍ES6相比与ES5在原有对象上的扩展,包括字符串、正则、数值、函数、数组、对象等扩展,本文是阮...

  • es6的数值,函数,字符串扩展

    一、es6的数值扩展 二、es6的函数扩展 代码效果:对象解构在函数中的应用 三、es6字符串扩展 常用方法 代码...

  • ES6之扩展的对象功能

    对象的类别 普通对象:拥有 JS 对象所有默认的内部行为。 奇异对象:其内部行为在某些方面有别于默认行为。 标准对...

  • js内置对象string

    1.string对象的常用方法和属性 2.给string对象扩展功能

网友评论

      本文标题:ES6(四)扩展的对象功能2

      本文链接:https://www.haomeiwen.com/subject/qpqhohtx.html