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 热力图自定义开发
1369 0
|
JavaScript
JS中防抖和节流
JS中防抖和节流
452 0
|
JavaScript 前端开发
面试官:【js多维数组扁平化去重并排序】
面试官:【js多维数组扁平化去重并排序】
183 0
|
7天前
|
云安全 监控 安全
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1351 8
|
6天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
427 10