zoukankan      html  css  js  c++  java
  • JavaScript中this指向

    一般调用函数的时候,我们需要确认函数内部的this指向问题

    一般指向函数的调用者

    总结一下不同函数调用方式对应的this指向

    1 普通函数调用 fun() -------window      严格模式时this为undefined

    2 构造函数调用 new Star() ------ 实例对象,原型对象里面的方法也指向实例对象

    3 对象方法调用 ------ 该方法所属对象

    4 事件绑定方法 ------- 绑定事件对象

    5 定时器回调函数 ------ window

    6 立即执行函数 -------- window

    函数内部的this指向可以手动指定,主要有call(),apply(),bind()三种方法

    1 call()

      语法: fun.call(that,arg1,arg2,...)

      功能:调用fun函数,改变fun函数的this指向

      主要应用: 可以用于构造函数的属性继承

    function Father(uname.uage) {
        this.name = uname
        this.age = uage
    }
    function Son(uname,uage) {
        Father.call(this,uname,uage)
    }
    let son = Son(lldh,42)
    

    2 apply()

      语法: fun.apply(that,[arg1,arg2,...]) 

     功能: 调用fun函数,改变fun函数内部的this指向

    典型应用: 求数组的最大最小值

            let arr = [1,22,4,55,99,6]
            let max = Math.max.apply(Math,arr) // 99
            let min = Math.min.apply(Math,arr) // 1
    

    3 bind()

    bind也可以改变函数内部的this指向,当时与call,apply所不同的是,bind并不会调用函数

    适用于要修改this指向但不用马上调用的场景,比如按钮的点击事件,定时器回调等

            let obj = {
                name: 'jsthin'
            }
            setTimeout(function(){
                console.log(this.name)  //jsthin
            }.bind(obj),2000)
  • 相关阅读:
    求子数组最大和
    layout_weight layout_width = 0dp
    一些日历的实现
    只显示年月日的日历
    每日学习之0512
    git 出现The current branch is not configured for pull No value for key branch.master.merge found in configuration错误的解决办法
    git的配置
    使用Spring security框架实现登陆页面时跳转到favicon.ico问题
    播放视频(c#)
    太阳沉落了
  • 原文地址:https://www.cnblogs.com/linhongjie/p/12154018.html
Copyright © 2011-2022 走看看