this指向问题

1,在回调函数中

回调函数定义:自己定义的、自己没调用、最终执行了。

2、api的学习方法
    关注这个api是用来干嘛的 语法;
    搞清楚这个api的每一个参数
    搞清楚这个api的返回值
setTimeout(function(a,b,c){
    console.log(a,b,c)
},1000,1,2,3)

function setTimeout(fn,time) {
    fn()
}

2,隐式丢失

怎么防止隐式丢失,bind()方法主要就是将函数绑定到某个对象,
bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()中的第一个的值,
例如:f.bind(obj),实际上可以理解为obj.f(),这时f函数体内的this自然指向的是obj


    var obj = {
        name:"达姆",
        age:18,
        wife:"周冬雨",
        marry:function () {
            console.log(this.name+"❤"+this.wife)
        }
    }
    //bind函数绑定this的指向obj
    setTimeout(obj.marry.bind(obj),3000)
        function setTimeout(fn,time) {
            fn()"如果没有用bind绑定this的指向的话,这里fn内部的this指向window,丢失属性"
        }
  

3、面试题


  document.write("周冬雨 ❤ 达姆")
  //bind函数绑定this的指向document
  var write =   document.write.bind(document);
  //如果换成下面代码,则会隐式丢失。
  var write = document.write
  write("周冬雨 ❤ 达姆")//如果没有绑定this指向 document,write内部this会指向window.

4、es5,this相关笔记

在js中 函数是一等公民!
在js中我们不会去区分的函数的定义;
我们会去区分函数的调用形式!!
如果一个函数被普通调用 显式调用了 就称为普通函数
如果一个函数被隐式调用了 就称为方法
如果一个函数被构造调用了 就称为构造函数

函数内部的this指向于谁;看函数调用位置的调用形式
    普通调用  fn()                          this指向window
    隐式调用  obj.fn()                      this指向调用者
    显式调用  fn.call(obj)  fn.apply(obj)   this指向obj
    构造调用  new fn()                      this指向指向构造出来的实例对象

学习this 最难的是 搞清楚每一个回调函数的this指向!!!!(看文档!)
    隐式丢失! 使用bind函数来解决!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值