2021-12-05

call apply bind


 // call apply bind  更改方法里面this的指向

        let obj1 = {

            name:'李现',

            age:30,

            sayHi(a,b){

                console.log(`Hi!我叫${this.name},今年${this.age}岁。${a}-${b}`);

            }

        }

        let obj2 = {

            name:'彭于晏',

            age:32

        }

        // 使用call()改变方法里面,this的指向

        // call()方法的第一个参数必须是指定的对象,方法的原有参数,挨个放在后面

        obj1.sayHi.call(obj2,200,100)

        let obj3 = {

            name:'胡歌',

            age:35

        }

        // 使用apply(),也可以改变方法里面this的指向,第一个参是指定的对象,方法的原有参数,统一放到第二个数组参数中

        obj1.sayHi.apply(obj3,[200,100])

        let obj4 = {

            name:'胡军',

            age:40

        }

        // 使用bind(),也可以改变方法里面this的指向,用法给call()一样

        // call()是直接运行方法,bind()是返回新的方法,然后再重新调用。

        obj1.sayHi.bind(obj4,200,100)()


将一个对象转为字符串

 //定义一个对象

        let obj1 = {}

        //给对象添加属性有两种方式:


  obj1.name = '张三'

        console.log(obj1);

        obj1['age'] = 20

        console.log(obj1);

        console.log('----------------------------------');

 //定义一个手机对象

        let phone = {

            name: "小米10",

            color: '红色',

            size: '1000*200*500',

            price: '2999'

        }

        //转成下面的字符串

        //"name=小米10&color=红色&size=1000*200*500&price=2999"

        // for in 循环,可以遍历出对象的所有key(key就是属性名称)



        //方式一:

        let arr = []  // 定义一个空数组

        for(let key in phone){

            //获取对象的属性值,可以通过['属性名']

            arr.push(key+'='+phone[key])

        }

        let str = arr.join('&')

        console.log(str);


 //方式二:

        // Object.keys方法,用于返回对象的所有属性名,返回值是一个数组

        let keys = Object.keys(phone)

        // Object.values,用于返回对象的所有属性值,返回值是一个数组

        // let values = Object.values(phone)

        let arr2 = keys.map(function(k){

            return [k,phone[k]].join('=')

        })

        let str2 = arr2.join('&')

        console.log(str2);


        //方法二:简化写法

        let str3 = Object.keys(phone).map(k=>[k,phone[k]].join('=')).join('&')

        console.log(str3);


统计字符串中每个字符串出现的次数

 //字符串

        let str = "fasdfsadfsegsageqwgersfdhrhdfsergterwhefweteqheq"

        //对象

        let obj = {}

        // 循环字符串中的所有的字符串

        for(let i=0;i

            //根据字符的名称,查找对象中,有没有对应的属性

            if(obj[str[i]]){

                //如果有,对应的属性值加1

                obj[str[i]]++

            }else{

                //如果没有,添加这个属性,属性值赋为1

                obj[str[i]] = 1

            }

        }

        console.log(obj);

        console.log('-----------------------');

        //定义一个出现次数最多的字符对象

        let max = {

            name:'',

            count:0

        }

        Object.keys(obj).forEach(k=>{

            //判断是否有别的字符串大于max

            if(obj[k]>max.count){

                max.name = k

                max.count = obj[k]

            }

        })

        console.log(max);


结果为:



对象数组


  //定义数组

        let arr1 = [11,22,33,44,55]

        console.log(arr1);

        //定义对象

        let obj1 = {

            name:'张三',

            age:20,

            sayHi:function(){

                console.log(`Hi!我叫${this.name},今年${this.age}岁`);

            }

        }

        console.log(obj1);

        obj1.sayHi()

        obj1.name = '李四'

        obj1.age = 30

        obj1.sayHi()

        console.log('------------------------------');

        // 对象数组,指的是数组里面存放的是对象

        let arr2 = [

            {

                name:'张三',

                age:20

            },

            {

                name:'李四',

                age:22

            },

            {

                name:'王五',

                age:24

            }

        ]

        console.log(arr2);



综合案例:学生管理系统


 // 定义一个学生管理对象

        let studentManager = {

            //定义一个学生数组

            students:[

                {

                    no:'1001',

                    name:'张三',

                    age:22,

                    sex:'男'

                },

                {

                    no:'1002',

                    name:'李四',

                    age:24,

                    sex:'女'

                },

                {

                    no:'1003',

                    name:'王五',

                    age:26,

                    sex:'男'

                }

            ],

            //显示所有学生信息的方法

            show:function(){

                let str = "学号 姓名 年龄 性别\n"

                // 循环出所有的学生信息,并拼接到str中

                this.students.forEach(s=>{

                    str+=`${s.no} ${s.name} ${s.age} ${s.sex}\n`

                })

                alert(str)

            },

            //添加学生信息的方法

            add:function(){

                //输入学生的基本信息

                let no = prompt('请输入学号:')

                //判断学号是否重复

                let index = this.students.findIndex(r=>r.no===no)

                while(index!==-1){

                    no = prompt('学号重复!请重新输入学号:')

                    index = this.students.findIndex(r=>r.no===no)

                }

                let name = prompt('请输入姓名:')

                let age = parseInt(prompt('请输入年龄:'))

                let sex = prompt('请输入性别:')

                // 创建学生对象

                let stu = {

                    no:no,

                    name:name,

                    age:age,

                    sex:sex

                }

                // 将学生对象添加到数组中(学号不能重复)

                this.students.push(stu)

                alert('添加成功!')

            },

            //修改学生信息的方法

            update:function(){

                //输入学生的基本信息

                let no = prompt('请输入学号:')

                //根据学号,到数组中查找并返回指定的学生对象

                let stu = this.students.find(r=>r.no===no)

                //根据学号判断,有没有找到该学生,找到了修改该学生的其他信息,没有找到提示学号不存在

                while(!stu){

                    no = prompt('您输入的学号不存在,请重新输入:')

                    stu = this.students.find(r=>r.no===no)

                }

                stu.name = prompt('请重新输入该学生的姓名:')

                stu.age = parseInt(prompt('请重新输入该学生的年龄:'))

                stu.sex = prompt('请重新输入该学生的性别:')

                alert('修改成功!')

            },

            //删除学生信息的方法

            delete:function(){

                //输入学生的基本信息

                let no = prompt('请输入学号:')

                //查找该学生在数组中的位置

                let index = this.students.findIndex(r=>r.no===no)

                while(index===-1){

                    no = prompt('学号不存在!请重新输入学号:')

                    index = this.students.findIndex(r=>r.no===no)

                }

                this.students.splice(index,1)

                alert('删除成功!')

            },

            //系统主菜单方法

            menu:function(){

                //接收用户的输入

                let no = prompt('*****学生管理系统*****\n1.查询学生 2.添加学生 3.修改学生 4.删除学生 0.退出系统')

                //判断用户输入的是什么

                switch(no){

                    case '1':

                        //调用显示所有学生信息的方法

                        this.show()

                        break;

                    case '2':

                        //调用添加学生信息的方法

                        this.add()

                        break;

                    case '3':

                        //调用修改学生信息的方法

                        this.update()

                        break;

                    case '4':

                        //调用删除学生信息的方法

                        this.delete()

                        break;

                    default:

                        alert('成功退出系统!欢迎下次使用!')

                        return   //跳转整个方法

                }

                // 再次调用自身方法(递归)

                this.menu()

            }

        }

        // 使用学生管理对象,调用menu方法

        studentManager.menu()

你可能感兴趣的:(2021-12-05)