资讯专栏INFORMATION COLUMN

JavaScript中的this如何区分

_ivan / 1839人阅读

摘要:自执行函数中的永远是给元素的某一个事件绑定方法,当事件出发的时候,执行对应的方法,方法中的是当前元素。

JS中的this代表的是当前行为执行的主体,JS中的context代表的是当前行为执行的环境,this是谁和函数在哪定义的以及函数在哪执行的没有任何的关系,如何区分this?
一、非严格模式下
1、函数执行,首先看函数名前面是否有‘.’,有的话,‘.’前面是谁,this就是谁,没有的话this就是window。
2、自执行函数中的this永远是window
3、给元素的某一个事件绑定方法,当事件出发的时候,执行对应的方法,方法中的this是当前元素。
4、在构造函数模式中,this.xxx = xxx,this就是当前类的实例
5、用call、apply、bind改变this
(五种情况下第五种优先)
二、严格模式下
1、自执行函数中的this永远是undefined
2、函数执行,首先看函数名前面是否有点,有的话,点前面是谁,this就是谁,没有的话this就是undefined

结论:严格模式下的this相对于非严格模式下的this主要区别在于:对于js代码中没有执行主体的情况下,非严格模式下默认都是window执行的,所以this指向的是window;但是在严格模式下,没有写就是没有执行主体,this指向的是undefined。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81248.html

相关文章

  • React入门学习

    摘要:对象的属性与组件的属性一一对应,但是有一个例外,就是属性,它表示组件的所有子节点。此外,还提供两种特殊状态的处理函数。组件中样式的写法这种方式错误使用这种方式,第一重大括号表示这是语法,第二重大括号表示样式对象。 如何渲染到容器 直接上代码: //第一个参数是构造的组件,第二个参数是使用组件的容器 ReactDom.render( , document.getEleme...

    laznrbfe 评论0 收藏0
  • 我来重新学习 javascript 的面向对象(part 1)

    摘要:其实在之前的工厂模式里面,也存在这个问题,不过工厂模式更彻底,直接完全创建一个新对象,而构造函数模式的话只是方法会被重新创建。 我来重新学习 javascript 的面向对象(part 1) 很多job 的描述都说要求精通 javascript 面向对象编程,但是根据一般的套路,写精通其实就是熟练,写熟练其实就是一般,写一般其实就是懵逼! showImg(https://segment...

    myshell 评论0 收藏0
  • JavaScript 三种方法,可以确定一个值到底是什么类型

    JavaScript 三种方法,可以确定一个值到底是什么类型。 typeofinstanceofObject.prototype.toString 为什么需要确定类型 ? ​ 只有确定类型的情况,才知道当前操作对象拥有哪些功能; 比如使用 push,unshfit,shfit 等方法时,那么其必须为数组类型时才能正确使用; ​ 当某些情况添加类型检查时,这样代码更加健壮,安全; typ...

    RyanHoo 评论0 收藏0
  • javascript几个知识点

    摘要:函数表达式函数声明立即执行函数表达式。变量提升所有的声明变量和函数都会被移动到各自作用域的最顶端,这个过程称为提升。严格模式绑定到,否则为全局对象。这种设置为单向,不可取消。如果值为则禁止删除这个属性。是否为可枚举的。 变量赋值 变量赋值分为两个动作: 如果当前没有声明过,那编译器会在当前作用域声明一个。 运行时引擎会在作用域查找该变量,如果找到就对其赋值。 查询有:LHS查询和R...

    niuxiaowei111 评论0 收藏0
  • 10个流行的JavaScript面试题

    摘要:然而,异步函数不会立即被推入调用堆栈,而是会被推入任务队列,并在调用堆栈为空后执行。将事件从任务队列传输到调用堆栈称为事件循环。我们调用接受和或返回另一个函数称为高阶函数的函数。 为了保证可读性,本文采用意译而非直译 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 1.如何理解 JS 中的this关键字? JS 初学者总是对 this 关键字感到困惑,因为与其他现...

    CollinPeng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<