函数内的this指向

这些this的指向,是当我们调用函彭赂时候确定的。调用方式的不同决定了this的指向不同一般指向我们的调用者

调用方式this指向
普通函数调用window
构造函数调用实例对象原型对象里面的方法也指向实例对象
对象方法调用该方法所连对象
事件绑定方法绑定事件对象
定时器函数window
立即执行函数window

1.普通函数   this 指向window

   function fn(){
            console.log(this);
        }
    fn();//window

2.对象的方法  this指向的是对象o

 var o={
            sayHi:function (){
                console.log(this);
            }
        }
        o.sayHi();

3.构造函数  this 指向ldh这个实例对象  原型对象里面的this也是指向ldh这个实例对象

 function Star(){};
       var ldh= new Star();

4.绑定事件函数  this指向的是函数的调用者  btn这个按钮对象

btn.onclick=function(){}  //点击这个按钮就可以调用

5.定时器函数  this指向window

window.setInterval(function(){},1000) 这个函数是定时器函数自动1秒钟调用一次

6.立即执行函数  this指向window

  (function(){
            console.log(123);
        })();
        // 立即执行函数自动调用

一.改变函数内部this 指向

JavaScript 为我们专门提供了一些函数方法来帮我们更优雅的处理函数内部this的指向问题,常用的有 bind(),call(), apply()三种方法。

1.call 方法

call方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的this指向。

fun.call(thisArg,argi,arg2,...)

fun:函数

thisArg :在fun函数运行时指定的this值

arg1,arg2:表示参数

   var o={
            name:"andy"
        }
        function fn(a,b){
            console.log(this);
            console.log(a+b);
        }
        fn.call(o,1,2);//这里输出的this指向o

  call  可以调用函数   可以改变函数内的this指向

  call的主要作用可以实现继承

  2.apply方法

  apply(方法调用一个函数。简单理解为调用函数的方式,但是它可以改变函数的this指向。

   

 fun. apply(thisArg,[argsArray])

thisArg :在fun函数运行时指定的this值

argsArray :传递的值,必须包含在数组里面

返回值就是函数的返回值,因为它就是调用函数

var o={
    name:"andy"
}
function fn(){
    console.log(this);
    console.log(arr);//"pink"
}
fn.apply(o,["pink"]);

1.调用函数 可以改变函数的内部指向

2.但是他的参数必须是数组(伪数组)

3.apply 的主要应用 比如我们可以利用apply 借助于数学对象求最大值

var arr=[1,66,3,99,4];
var max=Math.max.apply(Math,arr);
console.log(max);

3.bind方法

bind0方法不会调用函数。但是能改变函数内部this指向

fun. bind (thisArg,arg1, arg2, -.-)

thisArg :在fun 函数运行时指定的this值

arg1 , arg2∶传递的其他参数

返回由指定的this值和初始化参数改造的原函数拷贝

var o={
    name:"andy"
}
function fn(){
    console.log(this);
};
var  f=fn.bind(o);

1.不会调用原来的函数  可以改变原来函数内部的this指向

2.返回的是原函数改变this之后产生的新函数

blind方法应用

 var o={
    name:"andy"
}
function fn(){
    console.log(this);
};
var  f=fn.bind(o);
f();

1.不会调用原来的函数  可以改变原来函数内部的this指向

2.返回的是原函数改变this之后产生的新函数

3.如果有的函数我们不需要调用,但是又想改变函数内部的this指向 此时用bind

4.我们有一个按钮,当我们点击了之后,就禁用这个按钮,3秒钟之后开启这个按钮

var btn=document.querySelector("button");
btn.onclick=function(){
    this.disabled=true;
    setTimeout(function(){
              this.disabled=false;//此时定时器里面的this指向btn
    }.bind(this),3000)//这个this指向的是btn这个对象
}

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值