关于this

作者: 嘿菠萝 | 来源:发表于2017-01-17 21:48 被阅读23次
    • apply、call 有什么作用,什么区别
      • apply()方法可以在设置指定的this值和参数的情况下调用某个函数,参数以数组或类数组对象的形式存在
    • call()方法可以在设置指定的this值和一个或若干指定的参数即参数列表的前提下调用某个函数
    • call和apply的作用一样,不同之处是参数的形式不同,call接收参数列表,apply则接收参数数组

    代码

    1.以下代码输出什么

    var john = { 
      firstName: "John" 
    }
    function func() { 
      alert(this.firstName + ": hi!")
    }
    john.sayHi = func
    john.sayHi() 
    

    输出:John:hi!
    2.下面代码输出什么,为什么

    func() 
    function func() { 
      alert(this)
    }
    

    输出:window 因为该函数的执行环境是全局环境window
    3.下面代码输出什么

    function fn0(){
        function fn(){
            console.log(this);
        }
        fn();
    }
    fn0();
    document.addEventListener('click', function(e){
        console.log(this);
        setTimeout(function(){
            console.log(this);
        }, 200);
    }, false);
    

    输出:window document window
    4.下面代码输出什么,why

    var john = { 
      firstName: "John" 
    }
    function func() { 
      alert( this.firstName )
    }
    func.call(john) 
    

    输出:John 因为函数实例func调用call方法,指定函数func内部的this指向john对象。
    5.代码输出?

    var john = { 
      firstName: "John",
      surname: "Smith"
    }
    function func(a, b) { 
      alert( this[a] + ' ' + this[b] )
    }
    func.call(john, 'firstName', 'surname') 
    

    输出:John Smith
    6.以下代码有什么问题,如何修改

    var module= {
      bind: function(){
      //改成var that=this即可
        $btn.on('click', function(){
          console.log(this) //this指什么,此处this指的是$btn,$btn没有showMsg属性,会报错,不符合题意想要表示的是module
          this.showMsg();
        })
      },
      showMsg: function(){
        console.log('饥人谷');
      }
    }
    

    修改后:

    var module= {
      bind: function(){
      var that=this;
        $btn.on('click', function(){
          console.log(this);
          that.showMsg();
        })
      },
      showMsg: function(){
        console.log('饥人谷');
      }
    }
    

    版权声明:本教程版权归本人与饥人谷所有,转载需说明来源

    相关文章

      网友评论

        本文标题:关于this

        本文链接:https://www.haomeiwen.com/subject/kkbmbttx.html