zoukankan      html  css  js  c++  java
  • 对象

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <script>
            /* 1.属性的类型
                数据属性
                访问器属性
             */
            /*  数据属性--
            [Configurable]是否可删除并重新定义,是否可以修改他的特性,
            [Enumberable]是否可以 for-in循环返回,
            [Writable]是否可以被修改
            [Value]包含属性的实际值  */
            let person = {}
            Object.defineProperty(person,"name",{
                writable: false,
                value: "Nicjoles"
            });
            console.log(person.name); // Nicjoles
            person.name = "Greg";
            console.log(person.name); // Nicjoles  
            // 证明没有被修改成功
    
            /* 访问器属性--
            [Configurable]是否可删除并重新定义,是否可以修改他的特性,
            [Enumberable]是否可以 for-in循环返回,
            [Get]获取函数,在读取属性时调用
            [Set]设置函数,在写入属性时调用 */
    
            let book = {
                year_:2017,
                edition: 1
            };
            Object.defineProperty(book,"year",{
                get() {
                    return this.year_;
                },
                set(newValue) {
                    if(newValue > 2017) {
                        this.year_ = newValue;
                        this.edition += newValue - 2017;
                    }
                }
            });
            book.year = 2018;
            console.log(book.edition); // 2
    
    
            /* 
            2.合并对象
            Object.assign() 可合并一个或多个对象,并返回,不影响原对象
            实际上对源对象执行的是潜复制
            浅复制意味着只会复制对象的引用*/
            let dest, src, result;
            dest = {};
            src = {
                id: 'src'
            };
            result = Object.assign(dest, src);
            console.log(result); // Object { id: "src" }
    
            /* 
            3.对象解构
            
             */
            //  不使用对象解构
            let person2 = {
                name: 'mack',
                age: 12
            }
            let personName = person2.name,
                personAge = person2.age;
            //使用对象解构
            let { name: personName2, age: personAge2 } = person2;
            console.log(personName2); // mack
            console.log(personAge2); // 12
            // 或者提前声明变量
            let personName3, personAge3;
            ({ name: personName3, age: personAge3 } = person2);
    
            // 注意(源对象的修改,会影响新对象)
            // 部分解构出错,会影响后续的解构
    
            /* 
            4.构造函数模式
            --构造函数也是函数,任何函数只要使用new操作符调用就是构造函数,而不使用new操作符调用的函数就是普通函数
            --函数声明function Person(){}
            --函数表达式let Person = function(){}
            */
            function Person(name, age, job) {
                this.name = name;
                this.age = age;
                this.job = job;
                this.sayName = function() {
                    console.log(this.name);
                }
            }
    
            // 在另一个对象的作用域中调用
            // 将特定对象指定为作用域,这里的调用将对象o指定为Person()内部的this值,因此执行完函数后,所有属性和sayName()方法都会添加到对象o上面
            let o = new Object();
            Person.call(o, "nike", 25, "web");
            o.sayName();
    
            /* 
            5.对象迭代
            ----Object.values()  返回对象值的数组
            ----Object.entries() 返回键、值对的数组
            注意:非字符串属性会被转换为字符串输出,另外,这两个方法执行对象的浅复制
            */
           const o5 = {
               foo: 'baz',
               age: 12,
               qux: {}
           }
           console.log(Object.values(o5)); // Array(3) [ "baz", 12, {} ]
           /* 
                0: Array [ "foo", "baz" ]
    ​
                1: Array [ "age", 12 ]
                ​
                2: Array [ "qux", {} ]
                ​
                length: 3
             */
           console.log(Object.entries(o5));
        </script>
    </body>
    </html>
    

      

  • 相关阅读:
    找最大质因子问题
    ACM基础训练题解4302 丢失的牛
    ACM基础训练题解4301 城市地平线
    hnu 7/19 A Broken Audio Signal
    hnu7/20比赛 BUG 题解
    http://acm.hnu.cn/online/?action=problem&type=show&id=12817&courseid=267 7.19hnu/数据结构/数学 xxs.code
    SGU 解题报告
    2015 Multi-University Training Contest 1 题解&&总结
    HDU 5351 MZL's Border (规律,大数)
    SGU 239.Minesweeper
  • 原文地址:https://www.cnblogs.com/fdxjava/p/14571216.html
Copyright © 2011-2022 走看看