arguments 分页函数 对象 this 给数组类型添加方法

1.arguments

 <script>

        function fun1(num1, num2, num3) {

            //arguments对象是方法内部的一个对象

            console.log(arguments);

            //arguments对象身上的callee方法指向本身方法

            console.log(arguments.callee == fun1);

            //arguments对象通过索引可以获取方法参数

            console.log(arguments[0]);

            console.log(arguments[2]);

            console.log(arguments[3]);//arguments调用 fun1方法可以不传参数,后面传参 可以获取

        }

        fun1(100, 200, 300)

        console.log("--------------------------------------");

        function systemMenu() {

            console.log("***********学生管理系统*********************");

            console.log("1.添加学生");

            console.log("2.修改学生");

            console.log("3.查询学生");

            console.log("4.删除学生");

            console.log("0.退出系统");

            let no = parseInt(prompt("请选择"))

            if (no == 1) {

                console.log("执行添加学生");

            } else if (no == 2) {

                console.log("执行修改学生");

            } else if (no == 3) {

                console.log("执行查询学生");

            } else if (no == 4) {

                console.log("执行删除学生");

            } else {

                console.log("执行退出系统");

                return;

            }

            //使用递归实现菜单方法

            // menu()  如果外面函数名字改了,里面函数名没有修改,在运行时就会出现错误

            //所以推荐使用argunments.callee .因为它始终指向自身

            arguments.callee()

        }

        systemMenu()

    </script>

2.分页函数

 <script>

        let datas = [11, 22, 33, 44, 55, 66, 77, 88, 99, 111, 222, 333, 444, 555, 666, 777, 888, 999]

        //每页4条数据,返回第三页数据

        // let pageSize = 4

        // let pageIndex = 3

        // let ret = datas.slice((pageIndex - 1) * pageSize, pageIndex * pageSize)

        // console.log(ret);

        //进行包装  需要传3个参数:每页数量 ,当前页码 ,数组

        function fun1(pageSize, pageIndex, arr) {

            let ret = arr.slice((pageIndex - 1) * pageSize, pageIndex * pageSize)

            return ret

        }

        let ret2 = fun1(2, 4, datas);

        alert(ret2);

    </script>

3.对象

 <script>

        //在js中,如果a,b 那么a就是对象,b是对象的成员(属性或者方法)

        //对象就是描述某个事物的具体:由一组属性 方法构成.

        //在js中定义对象 有两种方式,1.直接定义  2.通过构造函数new

        //此方法直接定义对象,对象由一对{}定义

        let obj1 = {

            name: "赵璐四",

            age: 22,

            sex: "女",

            sayHi: function () {

                //在对象的方法中,通过this关键字返回对象本身,所以可有使用this关键字调用对象的其成员

                console.log(`大家好,我是 ${this.name}`);

            },

            study(time) {

                console.log(`我每天学习${time}小时`);

            }

        }

        obj1.sayHi()

        obj1.study(10)

        console.log("---------------------------------");

        //2.定义构造函数:可以理解为类,构造函数的目的是定义对象的模板,方便创建多个相同类型对象

        //构造函数就是函数 ,为了跟普通函数区别开,通常首字母大写

        function Student(name, age, sex) {

            //在构造函数内部:通过this给构造函数添加成员

            this.name = name

            this.age = age

            this.sex = sex

            this.sayHi = function () {

                console.log(`大家好,我是 ${this.name}`);

            }

            this.study = function (time) {

                console.log(`我每天学习${time}小时`);

            }

        }

        //通过构造函数创建对象

        let obj3 = new Student('杨幂', 35, '女')

        obj3.sayHi()

        obj3.study(5)

        let obj4 = new Student('吴彦祖', 22, '男')

        obj4.sayHi()

    </script>

4.this

 <script>

        //this是方法中的一个关键字,该关键字始终指向方法的调用者

        function fun1() {

            console.log("全局函数");

            //此时this指向window对象 ,是浏览器对象,就可以理解浏览器窗口

            console.log(this);

        }

        //直接调用全局方法,本质就是 window.fun1()

        //我们定义的全局成员(包括全局变量,全局方法)都会挂到全局对象window身上

        var message = "好好学习"

        console.log(window.message);

        fun1() //这里省略了window.   本来是window.fun1

        console.log("----------------------------");

        let obj1 = {

            name: "小明",

            age: 22,

            sayHi() {

                console.log("你好", this);

            }

        }

        let obj2 = {

            name: "小红",

            age: 22

        }

        //sayHi方法中this指向obj1,因为obj1 里方法

        obj1.sayHi()

        //给obj2添加一个方法叫sayHi,指向obj1的sayHi方法

        obj2.sayHi = obj1.sayHi

        //obj2本质上调用的是obj1的sayHi方法,当此时obj1的sayHi方法中的this执行obj2,

        //因为obj2再.方法

        obj2.sayHi()

        var name = "小芳"

        var age = 28

        window.sayHi = obj1.sayHi

        //方法中的this指向全局对象window

        sayHi()

    </script>

5.给数组类型添加方法

 <script>

        //给array类型添加一个myEvery方法

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

        Array.prototype.myEvery = function (callBack) {

            let count = 0

            //this指向函数的调用者,谁再调用myEvery方法,this就指向谁

            for (let i = 0; i < this.length; i++) {

                if (callBack(this[i])) {

                    count++

                }

            }

            if (count == arr.length) {

                return true

            } else {

                return false

            }

        }

        let ret2 = arr.myEvery(r => r > 20)

        console.log(ret2);

    </script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值