美文网首页
this的指向问题

this的指向问题

作者: 小小鱼yyds | 来源:发表于2021-03-26 11:31 被阅读0次
this一般有4种指向:
  • 1.如果是一般函数,this指向全局对象window;
  • 2.在严格模式下"use strict",为undefined.
  • 3.对象的方法里调用,this指向调用该方法的对象.
  • 4.构造函数里的this,指向创建出来的实例.
    来源于https://www.jianshu.com/p/c415530030a9

举例:

    var name = 'tanaka'
    var age = 22
    var obj = {
      name: 'yoxida',
      objAge: this.age,
      myFuc: function( ) {
        console.log(this.name + '的年龄是' + this.age)
      }
    }
    console.log('打印this指向----', obj.objAge)     // 22,指向windows
    obj.myFuc()      // yoxida的年龄是undifind ,

第一个this指向的是windows,第二个this指向构造函数创建出来的实例,没有取到全局声明的age。
但如果是全局声明的函数则指向window。

如何转移this的指向:
  var name = 'tanaka'
    var age = 22
    var obj = {
      name: 'yoxida',
      objAge: this.age,
      myFuc: function( ) {
        console.log(this.name + '的年龄是' + this.age + this.age)
      }
    }

    var db = {
      name: 'hayaxia',
      age: 33
    }

    // 转移this的指向
    obj.myFuc.call(db)   // hayaxia的年龄是33
    obj.myFuc.apply(db)  // hayaxia的年龄是33
    obj.myFuc.bind(db)()   // hayaxia的年龄是33,bind的返回的是新函数,必须调用才能执行

传参方式:

    var obj = {
      name: 'yoxida',
      objAge: this.age,
      myFuc: function(fm, tm) {
        console.log(this.name + '的年龄是' + this.age + '从' + fm + '去' + tm)
      }
    }
     var db = {
      name: 'hayaxi',
      age: 33
    }

    obj.myFuc.call(db, '上海', '天津')
    obj.myFuc.apply(db, ['上海', '天津'])
    obj.myFuc.bind(db, '上海', '天津')()

打印出来的都是“hayaxi的年龄是33 从上海去天津",但要注意apply的传参方式是把参数放进数组里

例子来源于:https://www.runoob.com/w3cnote/js-call-apply-bind.html

相关文章

  • this的指向问题

    总结: 如果是xxx()的形式,this指向window 如果是xxx.yyy()或者xxx[yyy]()的形式,...

  • this的指向问题

    JavaScript的this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数...

  • this的指向问题

    谁调用指向谁

  • this的指向问题

    函数的调用姿态 js完整的调用姿态是 上下文.函数(),也就是说函数并不能真正单独调用,他一定是被某个上下文调用...

  • this的指向问题

    this永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。 一.普通函数中的this指向 1.作为函数名...

  • this的指向问题

    this一般有4种指向: 1.如果是一般函数,this指向全局对象window; 2.在严格模式下"use str...

  • this指向问题

    首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上...

  • this指向问题

    简单一句话来说,this的指向不是在创建时候决定的,而是调用的时候,谁调用就指向谁。 在严格模式下,未指定坏境,而...

  • this指向问题

    三种解决方案 第一种,bind(this)来改变匿名函数的this指向 第二种,var _this= this 第...

  • this指向问题

    一、一般情况 所以用定时器时,一般提前将this保存,便于在定时器内部使用 二、改变this指向 call、 a...

网友评论

      本文标题:this的指向问题

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