this-Assignment

2016-10-16  本文已影响35人  犯迷糊的小羊

问答

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('饥人谷'); 
  }
}
上一篇下一篇

猜你喜欢

热点阅读