您的位置: 翼速应用 > 业内知识 > web前端 > 正文

一起聊聊JavaScript如何改变this指向

本文给大家带来了关于JavaScript的相关知识,在JavaScript中如何改变this指向呢?本文介绍了三种实现方法,希望能给大家带来帮助。


一起聊聊JavaScript如何改变this指向


一起聊聊JavaScript如何改变this指向


this随处可见,一般谁调用,this就指向谁。this在不同环境下,不同作用下,表现的也不同。以下的几种情况,this都是指向window的:


1、全局作用下,this指向的是window


console.log(window);
console.log(this);
console.log(window == this); // true


2、函数独立调用时,函数内部的this也指向window


function fun() {
   console.log('我是函数体');
   console.log(this);  // Window 
}
fun();


3、被嵌套的函数独立调用时,this默认指向了window


function fun1() {
    function fun2() {
        console.log('我是嵌套函数');
        console.log(this);  // Window
    }
    fun2();
}
fun1();


4、自调执行函数(立即执行)中内部的this也是指向window


(function() {
    console.log('立即执行');
    console.log(this);   // Window
})()


需要额外注意的是:


●  构造函数中的this,用于给类定义成员(属性和方法)

●  箭头函数中没有this指向,如果在箭头函数中有,则会向上一层函数中查找this,直到window


改变this指向


1、call() 方法


call() 方法的第一个参数必须是指定的对象,然后方法的原参数,挨个放在后面。
(1)第一个参数:传入该函数this执行的对象,传入什么强制指向什么;
(2)第二个参数开始:将原函数的参数往后顺延一位


用法: 函数名.call()


function fun() {
    console.log(this);  // 原来的函数this指向的是 Window
}
fun();
  
function fun(a, b) {
    console.log(this); // this指向了输入的 字符串call
    console.log(a + b);
}
//使用call() 方法改变this指向,此时第一个参数是 字符串call,那么就会指向字符串call
fun.call('call', 2, 3)  // 后面的参数就是原来函数自带的实参


2、apply() 方法


apply() 方法的第一个参数是指定的对象,方法的原参数,统一放在第二个数组参数中。
(1)第一个参数:传入该函数this执行的对象,传入什么强制指向什么;
(2)第二个参数开始:将原函数的参数放在一个数组中


用法: 函数名.apply()


function fun() {
    console.log(this);  // 原来的函数this指向的是 Window
}
fun();
  
function fun(a, b) {
    console.log(this); // this指向了输入的 字符串apply
    console.log(a + b);
}
//使用apply() 方法改变this指向,此时第一个参数是 字符串apply,那么就会指向字符串apply
fun.apply('apply', [2, 3])  // 原函数的参数要以数组的形式呈现


3、bind() 方法


bind() 方法的用法和call()一样,直接运行方法,需要注意的是:bind返回新的方法,需要重新
调用
是需要自己手动调用的


用法: 函数名.bind()


function fun() {
    console.log(this);  // 原来的函数this指向的是 Window
}
fun();
  
function fun(a, b) {
    console.log(this); // this指向了输入的 字符串bind
    console.log(a + b);
}
//使用bind() 方法改变this指向,此时第一个参数是 字符串bind,那么就会指向字符串bind
let c = fun.bind('bind', 2, 3);
c(); // 返回新的方法,需要重新调用
// 也可以使用下面两种方法进行调用
// fun.bind('bind', 2, 3)();
// fun.bind('bind')(2, 3);


以上就是关于JavaScript如何改变this指向之详细解析,翼速应用平台内有更多相关资讯,欢迎查阅!


我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题