leiyanting

导航

 

 

- call()
- apply()
- 这两个方法都是函数对象的方法需要通过函数对象来调用
- 通过两个方法可以直接调用函数,并且可以通过第一个实参来指定函数中this
- 不同的是call是直接传递函数的实参而apply需要将实参封装到一个数组中传递

function fun(a,b) {
                console.log("a = "+a);
                console.log("b = "+b);
                //alert(this);
            }
            
            var obj = {
                name: "obj",
                sayName:function(){
                    alert(this.name);
                }
            };

            /*
             * call()和apply()
             *     - 这两个方法都是函数对象的方法,需要通过函数对象来调用
             *     - 当对函数调用call()和apply()都会调用函数执行
             *     - 在调用call()和apply()可以将一个对象指定为第一个参数
             *         此时这个对象将会成为函数执行时的this
             *     - call()方法可以将实参在对象之后依次传递
             *     - apply()方法需要将实参封装到一个数组中统一传递
             * 
             *     - this的情况:
             *         1.以函数形式调用时,this永远都是window
             *         2.以方法的形式调用时,this是调用方法的对象
             *         3.以构造函数的形式调用时,this是新创建的那个对象
             *         4.使用call和apply调用时,this是指定的那个对象
             */
            
            //fun.call(obj,2,3);
            fun.apply(obj,[2,3]);

            

            var obj2 = {
                name: "obj2"
            };

            /*fun.apply();
            fun.call();
            fun();*/

            //fun.call(obj);
            //fun.apply(obj);

            //fun();
            
            //obj.sayName.apply(obj2);
 

 

posted on 2021-08-31 10:05  leiyanting  阅读(50)  评论(0)    收藏  举报