js方法apply&call小结

当你想使用某个方法,而你自己却没有但是别人有的时候,那你就用他的方法呗,你调他的方法,但是要传入你和你的参数,apply&call大概就是为了这个目的产生的~

call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。

二者的作用完全一样,只是接受参数的方式不太一样。

 

例如,有一个函数 func1 定义如下:

      var func1 = function(arg1, arg2) {};

      可以通过 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 来调用。其中 this 是你想指定的上下文,他可以任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。

JavaScript 中,某个函数的参数数量是不固定的,因此要说适用条件的话,当你的参数是明确知道数量时,用 call,而不确定的时候,用 apply,然后把参数 push 进数组传递进去。当参数数量不确定时,函数内部也可以通过 arguments 这个数组来便利所有的参数。

call 和 apply的定义说明:call和apply 是函数的非继承方法,在某个特定作用范围内调用某个函数,设置函数体内this对象的值

function NJie(){
         this.name = "Njie",
         this.sayName = function(){
             console.log(this.name);
         }
     }

     function KK(){
         this.name ="KK";
     }

     var n = new NJie();
     var k = new KK();

     n.sayName(); //NJie
     n.sayName.call(k); //KK

总结:比如说:k 对象没有 sayName 的函数,而 n 有这个函数,那 k 就通过call 来借 n的 sayName使用,当然也要把在 k 中的值带入到方法里。

// 父类
     function Person(name,age){
         this.name = name;
         this.age = age;
     }

     //子类 学生
     function Student(name,age,grade){

         Person.apply(this,arguments);  //子类继承了父类
         // Person.call(this,name,age);  //当然,也可以使用 call的方法
         this.grade = grade;
     }

     //创建一个学生的实例
     var s1 = new Student("WW","18","一年级");

     console.log("您好,",s1.name,"您今年",s1.age,"岁,就读于",s1.grade,",实在太棒了");

 

posted @ 2016-01-07 15:34  掉进书洞里的猫  阅读(145)  评论(0)    收藏  举报