Javascript this 函数深入详解

Javascript this 函数深入详解

什么是this?

thisjavascript中一个非常重要和有用的关键字,它代表当前函数执行的上下文,在不同的函数内部指向不同的对象。需要注意的是,this 的指向并不是在定义的时候确定的,而是在运行的时候才确定的。

this 的4中绑定规则

当你在函数里使用 this 时,请先看调用该函数的方式,它式通过调用方式来决定的。

默认绑定

当函数独立使用时,它的this处在默认绑定,也就是全局绑定。例如:

function yourFunction() {
    console.log(this);
}
yourFunction();

这段代码运行的结果为 window,因为这里的 this 等同于 window

隐式绑定

当函数是作为某个对象的属性时,它的this处在隐式绑定状态。例如:

var myObj = {
  myMethod: function() {
    console.log(this);
  }
}
myObj.myMethod();

这段代码的结果为 myObj,因为这里的 this 指向了 myObj

显示绑定

使用 callapply 可以直接指定函数的 this 值。例如:

function yourFunction() {
    console.log(this);
}
yourFunction.call(myObj);

这段代码的结果为 myObj,因为使用了 call 方法将 this 值绑定到了 myObj

new 绑定

当一个函数被用作构造器时(即带有 new 关键字),它的this绑定到正在构造的新对象上。例如:

function YourFunction() {
  this.name = 'Jack';
}
var yourObj = new YourFunction();
console.log(yourObj.name);

这段代码的结果为 Jack,因为 this 在执行 YourFunction() 函数时指向了新的对象 yourObj

示例1:解释默认绑定下this的指向

function yourFunction() {
    console.log(this);
}
yourFunction();

这段代码运行的结果为 window,因为这里的 this 等同于 window。因为在全局作用域下默认会把 this 绑定到全局对象 window 上。

示例2:了解隐式绑定下this的指向

var myObj = {
  myMethod: function() {
    console.log(this);
  }
}
myObj.myMethod();

这段代码的结果为 myObj,因为这里的 this 指向了 myObj

结论

学习 this 的规则和实际应用场景需要时间,可以在代码中加入 console.log(this) 来帮助理解 this 的指向关系。在解决问题时要仔细考虑 this 的绑定方式,以避免出现意外的结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript this 函数深入详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • js根据json数据中的某一个属性来给数据分组的方法

    实现 JS 根据 JSON 数据中的某一个属性来给数据分组的方法,可以使用 Array.prototype.reduce() 方法和 object[key] 或 Object.assign() 来处理分组数据。 以下是具体步骤: 首先,使用 Array.prototype.reduce() 方法来遍历 JSON 数据,并将其分组为一个对象。 在 reduce…

    JavaScript 2023年5月27日
    00
  • JS实现至少包含字母、大小写数字、字符的密码等级的两种方法

    要实现至少包含字母、大小写数字、字符的密码等级,可以采用以下两种方法: 方法一:使用正则表达式判断密码是否符合规范 首先,需要定义一个正则表达式来判断密码是否符合要求,可以使用以下正则表达式: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).{8,}$/ 其中: (?=.*\d):表示密码中必须包含至…

    JavaScript 2023年6月10日
    00
  • Javascript获取当前日期的农历日期代码

    获取当前日期的农历日期是一个常见的操作,下面是使用JavaScript实现的简要攻略: 步骤一:引入相关的JavaScript库 为了实现农历日期的获取,需要使用一些现成的JavaScript库,比如:lunar-calendar-js。通过在HTML中引入这个库,可以在JavaScript中使用它提供的方法来进行日期的转换。 代码示例: <!DOCT…

    JavaScript 2023年5月27日
    00
  • 简单实现js页面切换功能

    当我们需要在网站页面中实现切换效果,通常需要用到 JavaScript 来实现。下面是实现 js 页面切换功能的完整攻略: 第一步:添加 HTML 结构 首先,在需要实现页面切换的 HTML 页面中,需要添加跳转链接以及对应的容器标签。例如,我们想要实现跳转到“首页”和“关于我们”两个页面,则可以添加如下代码: <!DOCTYPE html> &…

    JavaScript 2023年6月11日
    00
  • JS 操作Array数组的方法及属性实例解析

    JS 操作Array数组的方法及属性实例解析 在JavaScript中,数组(Array)是一种非常常见的数据结构,它能够存储多个值,并且可以动态地添加、删除、修改元素。本文将详细讲解JavaScript中操作Array数组的方法及属性。 创建数组 在JavaScript中,可以使用[]或new Array()两种语法创建一个数组。其中,[]更为常见。 //…

    JavaScript 2023年5月27日
    00
  • javascript作用域和闭包使用详解

    JavaScript作用域和闭包使用详解 什么是作用域 作用域是指变量的可访问范围。在JavaScript中,变量的作用域主要有两种,全局作用域和局部作用域。 全局作用域中定义的变量可以被任何代码访问,而局部作用域中定义的变量只能在其所在的代码块(比如函数,循环等)中访问。 在JavaScript中,作用域链是沿着嵌套的代码块向上查询变量定义的一条链。如果当…

    JavaScript 2023年6月10日
    00
  • javascript ES6 新增了let命令使用介绍

    JavaScript ES6 新增了let命令使用介绍 在ES6之前,JavaScript中定义变量只有两种方式:var 和 window.xxx;ES6新增了let和const命令,增加了JavaScript定义变量的方式,let命令用于声明一个只在代码块内部可用的变量。 let命令基本用法 let 命令的用法与 var 完全相同,可以使用 let 命令声…

    JavaScript 2023年6月11日
    00
  • JavaScript中的单引号和双引号报错的解决方法

    JavaScript中的单引号和双引号都可以用于表示字符串,但是如果在使用时不注意规范,就可能会出现报错的情况。下面介绍一下在JavaScript中解决使用单引号和双引号时,可能会出现的报错情况以及解决方法。 1.问题描述 在JavaScript中,使用单引号或双引号需要注意引号的匹配问题。例如: var str = ‘This is a string&qu…

    JavaScript 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部