最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

用最简单的方法判断JavaScript中this的指向(推荐)

来源:懂视网 责编:小采 时间:2020-11-27 22:31:15
文档

用最简单的方法判断JavaScript中this的指向(推荐)

用最简单的方法判断JavaScript中this的指向(推荐):都说 JavaScript 是一种很灵活的语言,这其实也可以说它是一个混乱的语言。它把 函数式编程 和 面向对象编程 糅合一起,再加上 动态语言 特性,简直强大无比(其实是不能和C++比的,^_^ )。 JS 里的 this 在 function 内部被创建 指向调用时所在函数
推荐度:
导读用最简单的方法判断JavaScript中this的指向(推荐):都说 JavaScript 是一种很灵活的语言,这其实也可以说它是一个混乱的语言。它把 函数式编程 和 面向对象编程 糅合一起,再加上 动态语言 特性,简直强大无比(其实是不能和C++比的,^_^ )。 JS 里的 this 在 function 内部被创建 指向调用时所在函数

都说 JavaScript 是一种很灵活的语言,这其实也可以说它是一个混乱的语言。它把 函数式编程 和 面向对象编程 糅合一起,再加上 动态语言 特性,简直强大无比(其实是不能和C++比的,^_^ )。

JS 里的 this

  • 在 function 内部被创建
  • 指向调用时所在函数所绑定的对象(拗口)
  • this 不能被赋值,但可以被 call/apply  改变
  • 目录

    * 一个特例
    * 开始判断
        * 法则一:对象方法中的this指向对象本身(箭头函数形式的除外)
        * 法则二:多层嵌套函数中的this指向等同于包含该this的最近一个function的this
        * 法则三:箭头函数以及非指向对象方法中的function的情况下this指向window
    * 习题集
        * 普通函数中的this
        * 函数执行后返回另外一个函数中的this(普通函数中)
        * 多层嵌套函数中的this(定时器&箭头函数)1
        * 多层嵌套函数中的this(定时器&箭头函数)2

    一个特例

    在正式开始之前,我们先来说一个特例。

    // 构造函数
    function Student(name) {
     this.name = name
    }
    // 创建小明和小红两个实例
    var XM = new Student('xiaoming')
    var XH = new Student('xiaohong')
    // 
    输出信息 console.log(XM) // Student {name: "xiaoming"} console.log(XH) // Student {name: "xiaohong"}

    在构造函数中,this上的值会在创建实例的时候被绑定到新创建的实例上。不适用于下面的判断方法,所以特此说明。

    开始判断

    下面是一个典型例子,我们的分析从这里开始。

    var x = {
     name: 'bw2',
     getName1: function() {
     console.log(this)
     },
     getName2: function() {
     setTimeout(() => {
     console.log(this)
     },0)
     },
     getName31: () => {
     console.log(this)
     },
     getName32: function() {
     return function() {
     console.log(this)
     }
     }
    }
    x.getName1() // {name: "bw2", getName1: ƒ}
    x.getName2() // {name: "bw2", getName1: ƒ}
    x.getName31() // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}
    x.getName32()() // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}

    法则一:对象方法中的this指向对象本身(箭头函数形式的除外)

    var x = {
     name: 'bw2',
     getName1: function() {
     console.log(this)
     }
    }
    x.getName1() // {name: "bw2", getName1: ƒ}

    法则二:多层嵌套函数中的this指向等同于包含该this的最近一个function的this

    箭头函数没有独立的this作用域,所以继续往外层走,走到了getName: function(){}。那么就是他了,this指向等同于这个function内部的this指向。根据法则一,this指向对象本身。

    var x = {
     name: 'bw2',
     getName2: function() {
     console.log(this) // 等同于此处的this
     setTimeout(() => {
     console.log(this) // 原始的this位置
     },0)
     }
    }
    x.getName2() // {name: 'bw2', getName1: ƒ}

    我们可以试着在浏览器中运行,看看结果。

    法则三:箭头函数以及非指向对象方法中的function的情况下this指向window

    根据法则二,this是指向最近的function,因此,这里的this等同于返回的函数中的this,不是对象方法中的this,所以,指向全局。

    是不是感觉有点奇怪?不过实践证明确实如此。

    var x = {
     name: 'bw2',
     getName31: () => {
     console.log(this)
     },
     getName32: function() {
     return function() {
     console.log(this)
     }
     }
    }
    x.getName31() // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}
    x.getName32()() // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}

    习题集

    欢迎大家按照法则一到三依次判断,猜测结果,并在浏览器下测试。测试结果也可以回复,大家一起讨论。

    因本人能力有限,该系列法则可能在部分情况下失效。欢迎大家一起讨论。

    下面是做题时间。

    普通函数中的this

    function x() {
     console.log(this)
    }
    x()

    函数执行后返回另外一个函数中的this(普通函数中)

    function xx(){
     return function() {
     console.log(this)
     }
    }
    xx()()

    多层嵌套函数中的this(定时器&箭头函数)1

    var x = {
     name: 'bw2',
     getName: () => {
     setTimeout(() => {
     console.log(this)
     },0)
     }
    }
    x.getName()

    多层嵌套函数中的this(定时器&箭头函数)2

    var x = {
     name: 'bw2',
     getName: () => {
     setTimeout(function() {
     console.log(this)
     },0)
     }
    }
    x.getName()

    再次说明,该法则为实验性法则,未进行大范围的测试,不保证在所有情况下都有一致的结果。如果你发现了法则判断失败的情况,欢迎留言,一起探讨。

    总结

    以上所述是小编给大家介绍的Mysql 5.7.19 winx64 ZIP Archive 安装及使用教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    用最简单的方法判断JavaScript中this的指向(推荐)

    用最简单的方法判断JavaScript中this的指向(推荐):都说 JavaScript 是一种很灵活的语言,这其实也可以说它是一个混乱的语言。它把 函数式编程 和 面向对象编程 糅合一起,再加上 动态语言 特性,简直强大无比(其实是不能和C++比的,^_^ )。 JS 里的 this 在 function 内部被创建 指向调用时所在函数
    推荐度:
    标签: 判断 javascript this
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top