• 对this的理解?


    回答一:

      (1) Jsthis指向是不确定的,也就是说可以动态改变的。Call/apply 就是用于改变this指向的函数,这样设计可以让代码更加灵活,复用性更高

      (2) This一般情况下,都是指向函数的拥有者

      (3) 在函数自执行里,this指向的是window对象。

    扩展:关于this,还有一个地方比较让人模糊的是 dom事件里通常有如下3种情况。

      a、使用标签属性注册事件,此时this指向的是 window对象

      b、对于a,要让this指向input,可以将this作为 参数传递

      c、使用addEventListener等注册事件。此时this 是指向input

    回答二:

      (1) 处于全局作用域下的this

      this; //window

      var a = { name : this } //window

      var b = { this } // window

      在全局作用域下,this默认指向window对象。

      (2) 处在函数中的this,又分为以下几种情况:

        a、一般定义的函数,然后一般的执行

        var a = function () {

          Console.log(this)

        }

        a()

        This 还是默认指向window

        b、一般定义,用new 调用就行:

        var a = function () {

          Conlose.log(this)

        }

        new a()

        这时候让this指向新建的空对象,我们才可以给空 对象初始化自有变量

        c、作为对象属性的函数,调用时:

        var a = {

          f : function () {

            Console.log(this)

            }

          }

          f()

      (3)  通过call()apply()来改变this的默认引用:

        var b = { id : ‘b’ }

        var a = {

          f:fucntion () {

            Console.log(this)

            }

          }

         a.f.call(b)

     

    所有函数对象都有的call方法和apply方法,它们的用法大体相似,f.call(b);的意思是,执行f函数,并将f函数执行期活动对象里的this指向b对象,这样标示符解析时,this就会是b对象了。不过调用函数是要传参的。所以,f.call(b,x,y); f.apply(b,[x,y]);好吧,以上就是用call方法执行函数,与用apply方法执行f函数时传参方式,它们之间的差异,大家一目了然:apply通过数组的方式传递参数,call通过一个个的形参传递参数。

        (4) 一些函数特殊执行情况this的指向问题:

          a、setTimeOut()setInverval()

              var a = function(){

                Console.log(this)

            }

            setTimeout(a,0) //window

            setInterval()类似

          dom模型中触发事件的回调方法执行 中活动对象里的this指向该dom对象

  • 相关阅读:
    OSI安全体系结构
    PHP 二维数组根据相同的值进行合并
    Java实现 LeetCode 17 电话号码的字母组合
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 14 最长公共前缀
  • 原文地址:https://www.cnblogs.com/sunyang-001/p/10792744.html
Copyright © 2020-2023  润新知