js中this的指向问题归纳总结

yizhihongxing

绝大部分的新手,在学习JavaScript时都会遇到一个非常常见的问题:无法理解 this 的指向问题。这也是Javascript的一个复杂和有争议性的部分,本攻略旨在帮助读者归纳总结“js中this的指向问题”。

什么是 this

this 是 JavaScript 中的一个关键字,它是一个对象,并且它是由函数来调用的。this 的值在每个函数调用的时候都可能发生变化,具体的指向对象取决于函数的调用方式。

this 的指向问题

在JavaScript中,this 的指向可以分成以下四种情况:

  1. 全局上下文中的this

当函数不作为对象的方法调用时,this 指向全局对象 window。

javascript
console.log(this); // window

  1. 对象方法中的this

当一个函数作为对象的方法被调用时,this会指向该对象。

javascript
var obj = {
name: 'John',
age: 20,
sayName: function(){
console.log(this.name); // John
}
}
obj.sayName();

  1. 构造函数中的 this

在构造函数中,this 指向新创建的对象。

javascript
function Person(name, age){
this.name = name;
this.age = age;
}
var john = new Person('John', 20);
console.log(john.name); // John

  1. 使用 call()、apply()、bind() 显式指定this

call()、apply()、bind() 方法可以显式的指定函数执行时 this 的指向:

```javascript
function sayHello() {
console.log('Hello, ' + this.name);
}

var person = {
name: 'John'
};

sayHello.call(person); // 输出 "Hello, John"
sayHello.apply(person); // 输出 "Hello, John"

var bindedFunction = sayHello.bind(person);
bindedFunction(); // 输出 "Hello, John"
```

总结

本攻略详细总结了JavaScript中this的指向问题,从全局上下文、对象方法、构造函数以及显式指向的角度全面讲解了this的使用方法。对于想要精通JavaScript编程的开发人员来说,理解和掌握this的指向问题是非常重要的。

示例说明

示例一:

var obj = {
    name: 'John',
    age: 20,
    sayName: function() {
        console.log(this.name);
    }
};
obj.sayName(); // John

在这个示例中,this 指向 obj 对象,因此 sayName() 方法被执行时,会输出对象 obj 的属性 name 的值 "John"。

示例二:

function sayHello() {
    console.log('Hello, ' + this.name);
}

var person = {
    name: 'John'
};

var bindedFunction = sayHello.bind(person);
bindedFunction(); // 输出 "Hello, John"

在这个示例中,使用 bind() 方法显式地将函数 sayHello() 绑定到 person 对象上。因此,bindedFunction() 函数被调用时,this 指向了 person 对象,输出 "Hello, John"。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中this的指向问题归纳总结 - Python技术站

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

相关文章

  • JavaScript 函数表达式与函数声明的用法及区别

    JavaScript 中函数是一等公民,这意味着函数可以用作变量,参数或返回值来传递。我们可以使用两种方式声明和定义函数:函数声明和函数表达式。 函数声明 函数声明是使用 function 关键字定义函数的方式。函数声明提升(Hoisting),这意味着可以在函数声明之前调用函数。因为在 JavaScript 中,函数声明会被提升到作用域的顶部或当前的函数中…

    JavaScript 2023年5月27日
    00
  • React Router 中实现嵌套路由和动态路由的示例

    针对你提出的问题,“React Router 中实现嵌套路由和动态路由的示例”的完整攻略,我将分为以下步骤进行讲解。 安装 React Router 在开始之前,首先需要安装 React Router,可以使用以下命令进行安装: npm install react-router-dom 创建基本路由 首先,我们需要创建一个基本的路由,并在其中放置一个静态页面…

    JavaScript 2023年6月11日
    00
  • JS特殊函数(Function()构造函数、函数直接量)区别介绍

    JS中的函数(Function)是非常重要的概念。在JS中,有三种创建函数的方式:函数直接量、Function()构造函数和箭头函数。其中,函数直接量和Function()构造函数的功能和用法相似,但也有一些区别。 函数直接量 函数直接量是定义函数最简单的方式之一。它就是将一个函数的定义放在一个表达式中,这个表达式可以被赋值给一个变量,或者直接被调用。 函数…

    JavaScript 2023年5月27日
    00
  • 原生js实现无限循环轮播图效果

    原生JS实现无限循环轮播图的步骤如下: 定义样式和HTML结构 先定义轮播图的样式和HTML结构,可以用一个ul包含多个li标签,每个li标签里放置一张图片。 <div> <ul class="slider"> <li><img src="image1.jpg" alt=&qu…

    JavaScript 2023年6月11日
    00
  • js中匿名函数的N种写法

    接下来我将为您详细讲解 “js中匿名函数的N种写法” 的攻略。该攻略将介绍匿名函数的基本写法、立即执行函数、闭包、箭头函数、生成器函数和ES6中的模板字符串等多种写法,下面进行详细说明。 基本写法 匿名函数最基本最常见的写法如下: (function(){ //代码块 })(); 这其实是一个立即执行函数的写法,将一个匿名函数用小括号括起来,并在最后加上一个…

    JavaScript 2023年5月27日
    00
  • JavaScript动态数量的文件上传控件

    下面我将详细讲解JavaScript动态数量的文件上传控件的完整攻略。 什么是JavaScript动态数量的文件上传控件? JavaScript动态数量的文件上传控件是一个可以动态添加多个文件上传组件的控件。与传统的文件上传控件不同之处在于它支持增加上传文件的数量,而且使用JavaScript实现,不需要在服务器端进行特别的配置和编写。 如何实现JavaSc…

    JavaScript 2023年5月27日
    00
  • JavaScript如何获取数组最大值和最小值

    获取数组最大值和最小值是JavaScript中常用的操作,本文将详细讲解如何使用JavaScript获取数组最大值和最小值。 1. 使用Math对象中的max()和min()方法 JavaScript中的Math对象包含了许多常用的数学方法,包括获取数组最大值和最小值的方法——max()和min()。以下是使用max()和min()方法的代码示例: cons…

    JavaScript 2023年5月27日
    00
  • AJAX的使用方法详解

    关于”AJAX的使用方法详解”,我可以给你提供以下信息: AJAX的使用方法详解 基本概念 AJAX(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术。它通过异步的方式与服务器进行数据交互,不需要刷新整个页面就可以实现部分内容的更新和任意的服务器通信。 AJAX的优点 可以部分更新网页,提高用户的操作体验; 可…

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