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中改变this指向的方法(call和apply、bind)

    JS中的函数中会有一个特殊的变量this,它代表当前函数的执行上下文。但是,由于JS是一门动态语言,函数都可以作为变量进行传递和赋值,那么函数内的this指向就可能会出现变化。在这种情况下,我们需要改变函数内this的指向,以确保函数能够正常执行。而JS中改变this指向的方法主要有三种,分别是call、apply和bind。 call call() 方法可…

    JavaScript 2023年6月10日
    00
  • JS中的正则表达式及pattern的注意事项

    JS中的正则表达式及pattern的注意事项 在JS中,正则表达式是一个用于匹配字符串模式的对象,可以用来进行字符串的查找、替换、删除等操作,是一项非常重要的功能。在使用正则表达式的过程中,我们需要注意一些pattern的注意事项,下面就来详细介绍。 1. 正则表达式的基本语法 在JS中,我们可以通过使用RegExp对象来创建正则表达式,同时也可以使用字面量…

    JavaScript 2023年6月11日
    00
  • 浅谈jquery拼接字符串效率比较高的方法

    下面就来详细讲解一下关于“浅谈jQuery拼接字符串效率比较高的方法”这个话题的攻略。 什么是jQuery字符串拼接 在前端开发中,我们常常需要对字符串进行拼接,例如将一些文字、HTML标签、变量值等内容拼接成一个完整的HTML元素或字符串。在jQuery中,我们可以使用一些方法来实现字符串拼接。 jQuery字符串拼接效率比较高的方法 1. 使用数组进行字…

    JavaScript 2023年5月28日
    00
  • JS如何对Iframe内外页面进行操作总结

    下面是JS如何对Iframe内外页面进行操作总结的完整攻略: 1. 通过window.parent获取父级页面对象并进行操作 window.parent用于获取当前iframe的父级页面对象,通过它可以调用父级页面的函数或属性进行操作。以下是一个示例进行说明: <!– 父级页面index.html –> <!DOCTYPE html&g…

    JavaScript 2023年6月11日
    00
  • Python 功能和特点(新手必学)

    Python 功能和特点(新手必学) Python 是一种高级编程语言,具有简单易学、开发效率高等特点,非常适用于数据分析、机器学习、人工智能等领域。下面详细讲解 Python 的功能和特点。 功能 语法简单易学 Python 的语法非常简单,类似于英语,易于理解和记忆。以下是一个简单的 Python 程序,输出 “Hello World!”。 print(…

    JavaScript 2023年5月28日
    00
  • 基于JavaScript 声明全局变量的三种方式详解

    当我们需要在JavaScript中定义一个全局变量时,我们可以使用以下三种方式: 1. 在全局作用域下声明变量 第一种方式是直接在全局作用域中声明变量,这样的变量就会成为全局变量。 // 直接在全局作用域中声明变量,成为全局变量 var globalVariable = ‘我是全局变量’; 上述代码中,使用 var 关键字直接声明一个变量 globalVar…

    JavaScript 2023年5月28日
    00
  • Vuex的各个模块封装的实现

    Vuex是Vue.js的官方状态管理库。它通过对状态的集中式管理来解决组件之间共享状态管理的问题,让我们可以更好地组织代码和管理状态。Vuex中的各个模块都有特定的功能和职责,本文介绍了各个模块的封装的实现方式。 状态(State) 在Vuex中,状态是存储在store中的数据,我们一般将所有的状态都放在一个对象里。要访问状态信息,需要使用getter(可理…

    JavaScript 2023年6月11日
    00
  • javascript加号”+”的二义性说明

    当我们在JavaScript中使用加号 + 时,它具有两种不同的作用:数学加法和字符串拼接。这种情况被称为“加号的二义性”。 数学加法 当加号 + 作为两个数字之间的运算符使用时,它执行数学加法操作: const num1 = 5; const num2 = 10; const sum = num1 + num2; console.log(sum); // …

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