JavaScript关键字this的用法总结

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日

相关文章

  • JavaScript数组去重的五种方法

    下面我将详细讲解“JavaScript数组去重的五种方法”的完整攻略,包含以下五种去重方法: 1. 利用Set去重 const arr = [1, 2, 3, 3, 4, 4, 5]; const arrUnique = […new Set(arr)]; console.log(arrUnique); // [1, 2, 3, 4, 5] 利用Set的特…

    JavaScript 2023年5月27日
    00
  • js实现缓动动画

    实现缓动动画可以让页面更加生动,让用户更加愉悦地浏览页面。下面是实现缓动动画的完整攻略: 什么是缓动动画? 缓动动画是指物体在经过一段距离时,速度不断变化,而非匀速运动的动画效果。 实现缓动动画的思路 实现缓动动画的思路可以简单归纳如下: 获取要移动元素的初始位置 计算元素需要移动的距离和帧数 计算每一帧的时间间隔和移动距离 在每一帧中更新元素的位置 通过定…

    JavaScript 2023年6月10日
    00
  • 动态修改DOM 里面的 id 属性的弊端分析

    下面是关于“动态修改DOM里面的id属性的弊端分析”的完整攻略,由标题、问题分析、示例说明等几个部分组成。 标题 动态修改DOM里面的id属性的弊端分析 问题分析 在html页面中,我们经常需要对DOM元素进行操作,包括添加、删除、修改、移动等。其中,修改ID属性是一项常见的操作,有时我们需要通过脚本来动态修改DOM里面的ID属性。但是,这种做法却会带来一些…

    JavaScript 2023年6月10日
    00
  • JavaScript实现手写promise的示例代码

    下面是详细讲解“JavaScript实现手写promise的示例代码”的完整攻略。 理解promise 在讲解如何手写promise之前,我们先来理解一下promise,它是一个用来处理异步操作的对象。在promise中,一个异步操作被包装成一个状态机对象,该状态机由三个状态组成——pending(等待中)、fulfilled(完成)、rejected(拒绝…

    JavaScript 2023年5月28日
    00
  • 关于__defineGetter__ 和__defineSetter__的说明

    关于 __defineGetter__ 和 __defineSetter__ 的说明 __defineGetter__ 和 __defineSetter__ 是 JavaScript 中的两个方法,它们可以用于动态定义属性的 getter 和 setter 方法。在 ES5 中已经被废弃,建议使用 Object.defineProperty 来替代它们。 _…

    JavaScript 2023年6月10日
    00
  • js中关于new Object时传参的一些细节分析

    JS中通过new Object()方式创建对象时,可以传入一个参数来初始化对象属性。本文将介绍new Object()时传入参数的一些细节。 1. new Object()传入一个空对象 当new Object()传入一个空对象时,返回的对象与直接使用对象字面量创建对象的效果一样。 const obj1 = new Object({}); const obj…

    JavaScript 2023年6月10日
    00
  • 小程序云开发之用户注册登录

    小程序云开发是微信小程序提供的一项能力,它可以让开发者在小程序内使用云数据库、云函数等云开发能力,而无需进行繁琐的服务器搭建和API开发。在小程序中实现用户注册和登录功能,可以使用小程序云开发提供的云函数和云数据库完成。 注册用户 在小程序中,注册用户的主要步骤如下: 创建云开发环境 在使用小程序云开发前,需要先创建一个云开发环境。选择小程序开发工具中的“云…

    JavaScript 2023年6月10日
    00
  • JQuery验证jsp页面属性是否为空(实例代码)

    JQuery验证jsp页面属性是否为空是一个常见的需求,下面将给出一份完整的攻略。 步骤一:引入jQuery 在JSP页面中引入jQuery库,可以使用CDN或者本地引用。以下是本地引入的示例代码: <head> <script src="../jquery-3.6.0.min.js"></script&gt…

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