博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于JavaScript中this的相关知识点
阅读量:6940 次
发布时间:2019-06-27

本文共 1476 字,大约阅读时间需要 4 分钟。

关于this

this 提供了一种优雅的方式来隐式“传递”一个对象引用,因此可以将API设计得更加简洁并且易于复用。
/*     *this 隐式传递上下文对象     */    function identify() {        return this.name.toUpperCase();    }        function speak() {        var greeting = "Hello, I am " + identify.call(this);        console.log(greeting);    }    var me = {        name: "kelly"    }    var you = {        name: "lucy"    }    identify.call(me); //KELLY    identify.call(you); //LUCY    speak.call(me); //Hello, I am KELLY    speak.call(you); //Hello, I am LUCY
随着使用模式越来越复杂,显式传递上下文对象会让代码变得越来越乱,使用this则不会这样。

对于this的误解

新手会误认为this指向函数本身。
/*     *关于this的误解     */    function foo(num) {        console.log("foo: " + num);        this.count++;    }    foo.count = 0;    var i;    for (i = 0; i < 10; i++) {        if (i > 5) {            foo(i);        }    }    console.log(foo.count); //0
由此可见,浏览器解析语句产生了4条输出,证明foo(...)确实被调用了4次,但是foo.count仍然是0,显然从字面意思来理解this是错误的。这时候,可以使用Function.call()的方法强制使this指向foo函数对象。
/*     *使用function.call()方法使this指向foo函数对象。     */    function foo(num) {        console.log("foo: " + num);        this.count++;    }    foo.count = 0;    for (i = 0; i < 10; i++) {        if (i > 5) {            foo.call(foo, i)        }    }    console.log(foo.count);

this 到底是什么

this是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。当一个函数被调用时,会创建一个活动记录。这个记录会包含函数在哪里被调用、函数的调用方式、传入的参数等信息。this就是这个记录的一个属性,会在函数执行的过程中用到。

小结

学习this的第一步是明白this既不指向函数自身也不指向函数的词法作用域,抛开以前错误的假设和理解。this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。

转载地址:http://rbsnl.baihongyu.com/

你可能感兴趣的文章
201671030103 仇素龙 实验四软件工程结对项目
查看>>
自己写一个spring boot starter
查看>>
[leetcode] Subsets II
查看>>
图的邻接表表示
查看>>
linux nginx搭配https
查看>>
spring boot jpa 使用update 报错解决办法
查看>>
NIO学习系列:连网和异步IO
查看>>
struts2之action接受参数
查看>>
python set集合按行去重
查看>>
解决微信浏览器video全屏的问题
查看>>
强化学习之Q-learning ^_^
查看>>
P3373 【模板】线段树 2
查看>>
JDK动态代理
查看>>
初涉MySQL
查看>>
c# 编写windows服务
查看>>
[SequenceFile_2] SequenceFile 的基本操作
查看>>
Ubuntu频率较高的操作
查看>>
递归获取子节点
查看>>
20172307 2018-2019-1 《程序设计与数据结构》实验2报告
查看>>
PAT天梯赛L3-015 球队食物链
查看>>