Web前端JavaScript笔记(7)ECMA6新增数组方法

新增数组方法:

1. Array.from():  将伪数组转化为真数组

<script>
        window.onload = function () {
            let tag_li = document.getElementsByTagName("li");
            alert(tag_li.length);
            // 此时得到的是一个伪数组,如果tag_li.push("hello")会报错
            tag_li = Array.from(tag_li);
            tag_li.push("hello");    // 此时转换后可以调用数组的方法
            alert(tag_li);
        }
</script>

2. Array.find():在数组中查找符合条件的第一个元素,返回值是找到的元素

<script>
        window.onload = function () {
            let arr = [1,2,3,4,5];
            let res = arr.find(function (item, index, arr) {
                return item>3;
            });
            alert(res);
        }
</script>

3. findIndex():返回元素的下标

<script>
        window.onload = function () {
            let arr = [1,2,3,4,5];
            let res = arr.findIndex(function (item, index, arr) {
                return item>3;
            });
            alert(res);
        }
</script>

4. 合并对象

Object.assign():用户合并对象,将第二个到最后一个合并到第一个对象中,

<script>
        window.onload = function () {
            let obj1 = {
                a: 12
            };
            let obj2 = {
                user: "hui",
                text: "hello thr"
            };
            let obj3 = {
                l: "ff"
            };
            Object.assign(obj1, obj2, obj3);  // 将2,3合并到1
            console.log(obj1);
        }
</script>

集合:

1. 不重复

2. 无序

集合set: 键值是一样的

<script>
        window.onload = function () {
            let set = new Set();
            set.add("hui");
            set.add(123);

            // 集合的遍历
            for (let item of set.keys())
            {
                console.log(item);
            }

            // 利用这一特性数组去重
            let set1 = new Set([1,2,3,4,3,2,1]);
            let arr = [...set1];   // 集合转化为数组
            console.log(arr);
        }
</script>

集合map: 键值是不一样的, 映射

<script>
        window.onload = function () {
            let map = new Map();
            map.set("username", "tommy");
            map.set("age", "11");
            console.log(map.get("age"));

            // map遍历
            for (let [key, value] of map)
            {
                console.log(key + "," + value);
            }
        }
</script>

遍历:
1. 数组遍历;(前面已经学习过)

for 循环

for ... in

for ... each

2.  对象的遍历:

for ... in     // 遍历的是属性

3. set遍历:for .. of

4. map遍历:for ... of

回顾面向对象:

1. 面向过程语言

2. 面向对象语言

工厂模式: 假设需要批量创建对象,可以按照下面的方法进行创建:

过程可以分为三部分: 原料,加工,出厂

<script>
        window.onload = function () {
            // 定义一个创建对象的函数
            function createP(name, age, sex) {
                let person = Object();
                person.name = name;
                person.age = age;
                person.sex = sex;
                person.showName = function () {
                    console.log("Hello I am " + this.name);
                };
                return person;
            }
            let p1 = createP("tom", 12, "female");
            let p2 = createP("janny", 33, "male");
            p1.showName();
            p2.showName();
        }
</script>

而如果通过new运算符去调用这一函数,需要做以下的修改:

如果通过new调用函数,则这个函数会

1. 当前函数中的this指向新创建的对象

2. 自动完成 原料, 出厂操作

<script>
        window.onload = function () {
            // 定义一个创建对象的函数
            function Person(name, age, sex) {
                this.name = name;
                this.age = age;
                this.sex = sex;
                this.showName = function () {
                    console.log("Hello I am " + this.name);
                };
            }
            let p1 = new Person("tom", 12, "female");
            let p2 = new Person("janny", 33, "male");
            p1.showName();
            p2.showName();
        }
</script>

函数原型ProtoType,为对象添加方法,使得所有创建的对象能够共享此方法:

<script>
        window.onload = function () {
            // 定义一个创建对象的函数
            let a = [1,2,3,4];
            let b = [5,6,7,8];
            a.sum = function () {
                let value = 0;
                for (let i=0; i<this.length; i++)
                {
                    value += this[i];
                }
                return value;
            };   // a添加方法
            console.log(a.sum());
            console.log(b.sum());
        }
</script>

为了使所有的数组能够共享sum()函数:

<script>
        window.onload = function () {
            // 定义一个创建对象的函数
            let a = [1,2,3,4];
            let b = [5,6,7,8];
            Array.prototype.sum = function () {
                let value = 0;
                for (let i=0; i<this.length; i++)
                {
                    value += this[i];
                }
                return value;
            };   // a添加方法
            console.log(a.sum());
            console.log(b.sum());
        }
</script>

面向对象-继承,封装,多态:

1. 继承

2. 封装(封装构造函数)

3. 多态

ECMA6中定义类class:

<script>
        window.onload = function () {
            function Person(name, age, sex) {
                this.name = name;
                this.age = age;
                this.sex = sex;
            }
            Person.prototype.showSelf = function () {
                console.log("I am " + this.name);
            };
            let p1 = new Person("zha", 22, "female");
            p1.showSelf();

            class Person_1
            {
                // 定义构造函数
                constructor(name, age, sex)
                {
                    this.name = name;
                    this.age = age;
                    this.sex = sex;
                }
                // 当以方法:
                showSelf()
                {
                    console.log("I am " + this.name);
                }
            }
            let p2 = new Person("li", 33, "male");
            p2.showSelf();
        }
</script>

class中的继承:

<script>
        window.onload = function () {
            function Person(name, age, sex) {
                this.name = name;
                this.age = age;
                this.sex = sex;
            }
            Person.prototype.showSelf = function () {
                console.log("I am " + this.name);
            };
            let p1 = new Person("zha", 22, "female");
            p1.showSelf();

            class Person_1
            {
                // 定义构造函数
                constructor(name, age, sex)
                {
                    this.name = name;
                    this.age = age;
                    this.sex = sex;
                }
                // 当以方法:
                showSelf()
                {
                    console.log("I am " + this.name);
                }
            }
            let p2 = new Person("li", 33, "male");
            p2.showSelf();

            class Teacher extends Person_1
            {
                constructor(name, age, sex, school)   // 构造函数
                {
                    // 继承父类的属性
                    super(name, age, sex);
                    this.school = school;
                }
                showJob()
                {
                    console.log("I am a teacher in " + this.school);
                }
            }

            let p3 = new Teacher("zhang", 22, "female", "High school");
            console.log(p3.showSelf());   // 继承的方法
            console.log(p3.showJob());
        }
</script>

 

posted @ 2020-03-31 13:52  Alpha205  阅读(102)  评论(0编辑  收藏  举报