JavaScript关键字this的用法总结

yizhihongxing

JavaScript关键字this的用法总结

1. 什么是this

在 JavaScript 中,this 关键字指的是当前作用域下的对象,通常是在函数内部使用的。

2. this的用法

在 JavaScript 中,this 的值是动态确定的,即它的值依赖于函数的调用方式。下面就 someFunction 函数来说明 this 的用法。

function someFunction(arg1, arg2) {
  console.log(this);
}

2.1 函数作为对象的方法调用

如果函数是作为对象的方法被调用的,那么 this 就会绑定到这个对象上。

const myObject = {
  name: 'John',
  age: 30,
  sayHello: function() {
    console.log(this.name);
  }
}

myObject.sayHello(); // 输出 John

2.2 函数作为构造函数调用

如果函数被用作构造函数,那么 this 就会绑定到新创建的对象上。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

const person1 = new Person('John', 30);
console.log(person1); // 输出 Person { name: "John", age: 30 }

2.3 函数作为普通函数调用

如果函数作为普通函数调用,那么 this 就会绑定到全局对象(浏览器中通常是 window,Node.js 中是 global)上。

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

someFunction(); // 在浏览器中输出 window,在 Node.js 中输出 global

3. 注意事项

  • 使用箭头函数定义的函数没有自己的 this 值,继承的是其父作用域的 this 值。

  • 使用 call()、apply() 或 bind() 可以更改 this 的上下文。

4. 总结

在 JavaScript 中,this 关键字的值是动态的,它的值由函数的执行环境决定。在函数内部,this 可以被用来引用对象,其中 this 的实际值在代码执行时才会得到确定。

5. 示例代码

下面给出了一个更多 this 的用法和示例代码

var name = 'global'

var obj = {
  name: 'obj',
  sayName: function() {
    console.log(this.name)
  }
}

function sayName() {
  console.log(this.name)
}

var bindObjFn = sayName.bind(obj)

obj.sayName()         // 输出 obj
sayName()             // 输出 global
bindObjFn()           // 输出 obj

在该示例代码中:

  • obj.sayName() 为调用对象方法的形式,函数内部 this 的指向为调用该方法的对象 obj

  • sayName() 调用是通过全局对象调用的普通函数,所以函数内 this 的指向为全局对象。

  • bindObjFn() 调用是通过 bind() 改变 this 指向,bind() 是函数的原型方法,利用闭包可以保存 objbindObjFn() 调用方法就会指向 obj

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript关键字this的用法总结 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js promise 中使用 setTimeout 实现暂停执行的效果

    下面是使用 JavaScript Promise 和 setTimeout 实现暂停执行的攻略。 理解 Promise 在介绍 Promise 怎样结合 setTimeout 实现暂停执行的方法前,我们需要先理解 Promise 的基本概念。 Promise 是异步编程的一种解决方案,它代表了一个异步操作的最终完成或失败状态,并且提供了一组用于处理状态变化的…

    JavaScript 2023年6月11日
    00
  • JavaScript异步加载浅析

    JavaScript 异步加载浅析 在网页开发中,我们经常会遇到需要加载外部资源(如CSS、JS等)的情况。传统的加载方式是同步加载,即在加载完一个资源后才会加载下一个资源,这样会导致页面加载速度较慢,影响用户体验。因此,异步加载成为了一个非常重要的技术。 异步加载是指在加载资源的同时,不会阻塞页面的其他操作,而是充分利用空闲时间进行资源加载。在 JavaS…

    JavaScript 2023年5月27日
    00
  • javascript创建函数的20种方式汇总

    首先,我们需要明确“JavaScript创建函数的20种方式”是指通过不同的方法来创建JavaScript函数。下面将介绍其中的20种方式。 1.使用函数声明方式 函数声明方式就是使用function关键字来声明和定义函数。例如: function myFunction() { //函数体 } 2.使用函数表达式方式 函数表达式方式是使用函数字面量来创建函数…

    JavaScript 2023年5月27日
    00
  • JS闭包原理及其使用场景解析

    JS闭包原理及其使用场景解析 什么是闭包? 闭包(Closure)指的是有权访问另外一个函数作用域内变量的函数。 用更通俗易懂的话来说,闭包就是函数内部定义的函数,它可以访问自己的变量,还可以访问父级函数的变量。 闭包的原理 在JavaScript中,如果两个函数嵌套的话,内部函数就可以访问外部函数的变量。这是因为在JavaScript中函数会形成一个作用域…

    JavaScript 2023年6月10日
    00
  • Javascript中的高阶函数介绍

    Javascript中的高阶函数介绍 在Javascript中,高阶函数是一种非常常见的函数类型,它们能够接收一个或多个函数作为参数,并且返回一个新的函数。本篇文章将详细讲解高阶函数的基本概念、优点和示例。 高阶函数的基本概念 高阶函数是函数式编程中非常重要的一种概念。根据Javascript的语言特性,任何函数都可以作为参数传递给另一个函数,并且也可以将函…

    JavaScript 2023年5月27日
    00
  • javascript history对象详解

    JavaScript history对象详解 什么是history对象 history对象是JavaScript的一个属性,它代表了用户在浏览器中访问过的URL记录,通过它,我们可以非常方便地在浏览器历史记录中前进或后退,也可以获取浏览器的历史记录以及当前页面所处的位置。 history对象的使用 前进和后退 在history对象中,最基本的方法就是back…

    JavaScript 2023年5月27日
    00
  • js动态生成form 并用ajax方式提交的实现方法

    下面我将为你详细讲解“js动态生成form 并用ajax方式提交的实现方法”的完整攻略。 1. 创建Form表单 通过JavaScript代码创建一个空白的表单对象,可以通过以下方式: var form = document.createElement(‘form’); 接下来设置表单的相关属性,例如表单的方法、action、enctype等,示例代码如下:…

    JavaScript 2023年6月11日
    00
  • JS继承 笔记

    JS继承 笔记 在JavaScript中,继承是实现面向对象编程的重要概念之一。JS继承可以让我们在保留原有对象特性的同时,扩展和重用其功能,让代码更加高效和灵活。 继承的基本概念 在Javascript中,所有对象都有原型(prototype)属性,该属性指向另一个对象。当我们访问对象的一个属性或方法时,如果当前对象没有这个属性或方法,那么它会去查找这个对…

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