码迷,mamicode.com
首页 > 移动开发 > 详细

Call && apply 用法

时间:2016-07-22 19:38:19      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:function   return   

     . 每一个函数都包含两个非继承而来的函数: call,apply.  在特定的作用域中调用函数,  实际上相当于   函数体内this对象的值

     .call,apply  用途之一就是传递参数.    实际上强大的地方是  :   扩大函数的作用域   

           

eg1:   ( 传递参数 )

     

     //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

          function sum(x,y){

               return x+y;

          }

          function call1(n1,n2){

               return sum . call ( this,n1,n2 );          //~~~  return sum.apply(this , [ n1, n2 ] );

          }

          

          alert(call1(10,20));      //alert(30);

     //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

eg2:  (扩充作用域)    好处:  对象和方法 没有 耦合关系 

  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

     

  window.color =  ‘ red ‘;

  var obj  =  { color : ‘ blue‘};

   function showColor()  {

          alert( this.color );

   }

     

   showColor.call( window );    // showColor.call(this);   // red

   showColor.call( obj );  //blue

 

  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

     //自定义对象

     function Obj ( x , y){

          this.x = x;

          this.y = y;

           return x*y ;

     }

     

     // 方法 

     function  fun( a , b ){

          return a + b;

     }

     var obj = new Obj (10 , 20);

     alert( fun . call ( obj , obj.x , obj.y );    // 30 

     

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~













举几个具体例子:


例子1:

function add(a,b) 

    alert(a+b); 

function sub(a,b) 

    alert(a-b); 

//add.call(sub,3,1);

add.apply(sub,[3,1]);   






例子2:

function Class1() 

    this.name = "class1"; 

    this.showNam = function() 

    { 

        alert(this.name); 

    } 

function Class2() 

    this.name = "class2"; 

var c1 = new Class1(); 

var c2 = new Class2(); 


//c1.showNam.call(c2);   //class2

c1.showNam.apply(c2);




例子3:


   var func=new function(){this.a="func"};

//    var func = { a:"func"};


    var myfunc=function(x){

        var a="myfunc";

        alert(this.a);

        alert(x);

    };

   // myfunc.apply(func,"var");

    myfunc.apply(func,["var"]);  




例子4:[吊炸天有木有~call 可以用来实现继承]


function Class1() 

    this.showTxt = function(txt) 
    { 
        alert(txt); 
    } 

function Class2() 

    Class1.call(this); 

var c2 = new Class2(); 
c2.showTxt("cc"); 



例子5:多继承[javaScript 如何来模拟面向对象的继承,还可以实现多重继承]


function Class10() 

    this.showSub = function(a,b) 

    { 

        alert(a-b); 

    } 

function Class11() 

    this.showAdd = function(a,b) 

    { 

        alert(a+b); 

    } 

function Class2() 

    Class10.call(this); 

    Class11.call(this); 


var c2 = new Class2();

c2.showAdd(1,4);  //5

c2.showSub(10,6);//4












Call && apply 用法

标签:function   return   

原文地址:http://9022773.blog.51cto.com/9012773/1828854

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!