玩笑过后

导航

call和apply的作用实例

<script>
    var scopeTest = function(){ //考察了 this 的含义
    window.a=2;
    function fn(b){
        this.b = b;
        console.log(this.a);
    }
    var obj = {a:4,fn:fn};
    /*
        gl: a = 2
            fn 
            obj
    */
    fn();//2
    
    obj.fn();//4    this指向window
    fn.call(obj);//4    this指向obj
    fn.call(null);//2    当参数为null时this指向window
    fn.apply(obj);//4    this指向obj
    fn.apply(null);//2    当参数为null时this指向window
    var fninstance = new fn(8);//undefined  fn()执行 this指向fninstance 
    console.log(fninstance.b);//8    this指向fninstance 参数为8
    
    }();

  </script>

 

实例2

 

 <script>
    function fruits() {} 
    fruits.prototype = {
        color:"red",
        say: function() {console.log(this.color);}
    }
    var apple = new fruits();
     
    apple.say();//red
    var banana = {color:"yellow"};//
    apple.say.call(banana);//yellow this指向banana
    apple.say.apply(banana);//yellow this指向banana

  </script>

 

 

实例3

var obj = {
        name: 'jim',
        getName:function(){
            console.log( this.name );
        }
    }
    var obj2 = {
        name:'tom'
    }
    obj.getName.call(obj2);

 

posted on 2018-09-27 16:03  玩笑过后  阅读(137)  评论(0编辑  收藏  举报