美文网首页
this-Assignment

this-Assignment

作者: 犯迷糊的小羊 | 来源:发表于2016-10-16 18:46 被阅读35次

    问答

    • apply、call 有什么作用,什么区别

    1.function.prototype.call()

    函数实例的call方法可以指定函数内部this的指向,即函数执行时所在的作用域

    var obj = {};
    var fn = function(){
      return this
    }
    fn()  === this // true
    fn.call(obj) === obj // true
    

    fn()执行时所在的作用域是全局环境,所以this是window,而fn.call(obj)则是在对象obj环境下执行的,所以此时的this指向obj。

    fn.call(null) === this
    fn.call(undefined)  === this
    fn.call === this 
    

    call方法内部的参数如果为空、null和undefined,则默认传入全局对象。

    var obj = {};
    var add = function(x,y){ 
    return x+y
    }
    
    add.call(obj,2,3)
    

    call方法还可以接受多个参数。call的第一个参数就是this所要指向的那个对象,后面的参数则是函数调用时所需的参数。

    2.function.prototype.apply()
    apply方法的作用与call方法类似,也是改变this指向,然后再调用该函数。唯一的区别就是,它接收一个数组作为函数执行时的参数。

    function fn(x,y){
        return x+y
    }
    
    fn.call(null,1,1)//2
    fn.apply(null,[1,1])//2
    

    fn函数本来接受两个参数,使用apply方法以后,就变成可以接受一个数组作为参数。

    代码

    1.以下代码输出什么?
    Johb:hi!
    
    2.下面代码输出什么,为什么
    [object Window]
    因为该函数的执行环境是全局环境window
    
    3.下面代码输出什么
    window对象//调用函数fn时的全局环境是在window下
    
    文档对象//点击文档时执行回调函数,此时回调函数的执行环境是文档对象
    
    window对象//点击文档后过0.2秒后,此时回调函数的执行环境已经变为全局环境
    
    4.下面代码输出什么,why
    John
    函数实例func调用call方法,使其执行环境在对象john下.
    所以,函数func内部的this指向john对象
    
    5.代码输出?
    John Smith
    
    
    6.以下代码有什么问题,如何修改
    var module= {
     bind: function(){ 
        $btn.on('click', function(){ 
          var that =this
          console.log(this) 
          //this指的是$btn
            that.showMsg()
          } ) 
        }, 
        showMsg: function(){ 
        console.log('饥人谷'); 
      }
    }
    

    相关文章

      网友评论

          本文标题:this-Assignment

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