美文网首页
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

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