Javascript-this指向

简介: Javascript-this指向

this指向


  • 全局上下文:

在全局作用域中,即在任何函数外部,this 指向全局对象(浏览器环境中为 window 对象,Node.js 环境中为 global 对象)。

  • 函数内部:

在函数内部,this 的指向可能有所不同,取决于函数的调用方式:

作为函数调用:当函数作为普通函数调用时,this 指向全局对象(严格模式下为 undefined)。

作为对象方法调用:当函数作为对象的方法调用时,this 指向调用该方法的对象。

使用 call、apply 或 bind 方法显式绑定 this:可以使用这些方法来显式指定函数执行时的 this 指向。

  • 构造函数:

当函数被用作构造函数来创建新对象时,this 指向新创建的实例对象。

  • 事件处理函数:

在事件处理函数中,this 指向触发事件的元素。

  • 箭头函数:

箭头函数不会绑定自己的 this 值,而是继承外部作用域的 this 值。

        1. this代表所在function被哪一个对象调用了,那么这个this就代表这个对象。
        2. 如果没有明确的调用对象,则代表window
         function fn(){
             alert(this);
         }
         fn(); window  //没有明确对象,所以代表
         document.onclick = fn;  document
         var obj = {fn: fn}
         obj.fn();  obj
         'use strict';
         a = 3;
         alert(a);
        function fn(){
           'use strict';
            alert(this);  undefined
        }
        fn();


强行改变 this 指向


修改上下文中的this指向方法 (函数的方法,改变的是函数内部的this指向)


  1. call(对象,参数1,参数2,……) :返回对象后,这个函数立即运行
  2. apply(对象,数组或arguments) : 返回对象后,这个函数立即运行
  3. bind(对象,参数1,参数2,……) : 返回函数
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" name="" id="txt">
    <div id="box"></div>
    <script>
        var div = document.querySelector('#box');
        var inp = document.querySelector('#txt');
        document.onclick = function(){
            alert(this); //document
            setTimeout(function(){
                alert(this); //window,想让this指向document
            }.bind(this), 3000); //document
        }
        function fn(){
            alert(this);
        }
        fn.call(div); // div
        fn.apply(document); //document
        fn.bind(inp)();  // input
    </script>  
</body>
</html>


目录
相关文章
Echarts 热力图自定义开发
Echarts 热力图自定义开发
1282 0
|
JavaScript
JS中防抖和节流
JS中防抖和节流
405 0
|
JavaScript 前端开发
面试官:【js多维数组扁平化去重并排序】
面试官:【js多维数组扁平化去重并排序】
179 0
|
1天前
|
云安全 人工智能 自然语言处理
|
6天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
314 116
|
8天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
613 53
Meta SAM3开源:让图像分割,听懂你的话
|
21天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。

热门文章

最新文章