JavaScript有关this指向问题,如何修改this指向

深度解析快递柜管理系统的C++实现:设计与实现 本文详细介绍了一个基于C++的快递柜管理系统的设计与实现,包括系统需求分析、架构设计、数据库设计、关键功能模块实现和测试与验证。通过详细的代码示例和理论分析,读者可以全面了解如何开发一个完整的快递柜管理系统。希望本文能够为读者在实际项目开发中提供有价值的参考。 阅读详情

认识this

Js使用的是静态作用域,即作用域和代码定义的有关,和代码执行无关。不过我们的this正好和它们相反,在js中,this的值是根据执行位置决定的,通俗来说就是this的值取决与你如何调用这个函数,而不是函数定义所在的位置。

this的指向

1.在最外层的作用域中this指向的是 window

<script>
    console.log(this)
</script>

2.定时器中的this指向的是 window

<script>
    setTimeout(function () {
        console.log(this)
    }, 3000)
    setInterval(() => {
        console.log(this)
    }, 1000);
</script>

3.一般函数中使用
在一个普通的函数中,this 的值在浏览器中是window。如果是在严格模式下,一般的函数调用中 this 的值是 undefined

//默认情况下为非严格模式
<script>
    function add() {
        console.log(this)
    }
    add()
</script>

4.立即执行函数中的this指向的是 window

<script>
    (function(){
        console.log(this)
    })()
</script>

5.DOM事件绑定的处理函数中的 this指向的是触发该事件的DOM对象。

<script>
    document.querySelector('div').onclick = function () {
        console.log(this)
    }
</script>

6.作为对象的方法如果函数作为对象的方法,也就是说调用方法是对象.方法(),那么这个时候所执行的函数中this就是这个对象的引用。

<script>
    let sx = {
        name: '二狗子',
        age: 19,
        run: function () {
            console.log(this.name)
        }
    }
    sx.run()
</script>

7.构造函数中的this就是在函数作为构造函数使用时,this指向的是新创建的对象。

<script>
    function Sx() {
        this.name = '二狗子',
            this.age = 19,
            this.run = function () {
                console.log(this.age)
                return 888
            }
            console.log(6666)
    }
    let a = new Sx()
    // 创建一个空对象
    // 调用Sx函数
    // this指向该对象
    console.log(a.name)
    console.log(a.run())
</script>

8.原型对象方法中的this
原型对象中的this,指向的也是新创建的对象。

<script>
    function Mouse(){
        this.name = '二狗子'
        this.run = function(){
            console.log(this.name)
        }
    }
    let gouObj=  new Mouse()
    // gouObj.run()
    function Cat(x){
        this.name = x
    }
    Cat.prototype = gouObj
    let smallCat = new Cat('我是猫')
    smallCat.run()
</script>
//打印出来的是:我是猫

9.箭头函数中没有this

函数的调用和改变this指向

1.call()方法的两个作用
(1)正常的调用和传参

<script>
    function sx(age){
        console.log(age)
        console.log(this)
    }

    sx(18)
    sx.call(null,19)
</script>

(2)改变this指向和传参

<script>
    function sx(age){
        console.log(age)
        console.log(this)
    }

    let a = {
        name:'二狗子',
        age:22
    }
    sx.call(a,19)
</script>

扩展:使用call() 实现继承

<script>
    function Cat(x, y) {
        this.name = x;
        this.age = y;
        this.run = function () {
            console.log('跑得快');
        };
        this.catchMouse = function () {
            console.log('我會抓老鼠');
        }
        console.log(6666)
    }

    function Tiger(a, b) {

        this.name = '虎';
        this.run = function () {
            console.log('跑得更快');
        }
        Cat.call(this, a, b);
        // Cat.apply(this, [a, b]);
    }

    // new 构造函数发生的过程:
    // 创建一个空对象                     
    // 将构造函数内部的this指向该对象        
    // 执行构造函数里面的代码     
    // 返回该对象

    var t2 = new Tiger('大花猫', 18);
    t2.catchMouse();
    t2.run()
    console.log(t2.name);
    console.log(t2.age);
</script>

2.apply()
apply() 方法和call() 方法的作用一模一样,区别只是传参的时候,传参方式不同,apply()传参的时候,需要将参数写入到一个数组中
3.bind()方法和前面说的apply()方法call()方法一样,可以改变this指向,不过它不会自动调用函数,不过它会返回一个经过改造后的函数的拷贝。

function xx(age, sex){
    console.log(this);
    console.log(this.name);
    console.log(age);
    console.log(sex);
}

var obj = {name: '书生'};
// 并不会调用函数
xx.bind(obj, 18, '男');

// 可以改变this指向
// 可以返回改变this后的函数的拷贝

// 返回值是xx函数的一个拷贝
// 这个拷贝 是个经过改造后的xx
// 改造的内容:将xx函数中this指向obj对象
// 传参方式和call一样
var X = xx.bind(obj, 18, '男');
// 手动调用
X();
YOLO11 改进系列 | 引入2023年 MLCA 的 C3k2_MLCA 模块,近零参数开销的本地-全局通道注意力,适合检测与分割特征增强 本文提出将MLCA(混合局部通道注意力)模块嵌入YOLOv11的C3k2框架中,形成C3k2_MLCA改进结构。该模块通过5×5局部池化和1×1全局池化双路融合,结合ECA式Conv1d生成通道注意力,在几乎不增加参数量的前提下(仅增加66个参数),实现了局部空间信息与全局通道统计的联合建模。相比传统SE和ECA注意力,MLCA保留了空间分布信息,更适合实例分割等需要精细定位的任务。实验表明改进后模型参数量仅增加0.002%,计算量基本不变,是一种高效的注意力增强方案。 阅读详情

相关推荐

uniapp开发小程序保存图片权限获取失败一直走fail?本地能保存,线上版就不行! 原来是这个问题

通过这次经历,我发现线上版小程序和开发版、体验版的权限控制差异较大。如果你也遇到类似的问题,首先要检查是否已勾选“采集用户隐私”,并确保在提交审核时配置了隐私条款。这个设置非常关键,避免像我一样浪费了不少时间和版本。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1044

js试题及答案(四)

一、单选题(共30题,每题2分) 1.闭包的好处说法不对的 A 缓存变量 B 防止命名冲突 C 可能造成内存泄露 D 减少内存使用率 解析: 无 2.不能进行强制类型转化的为 A parseInt B parseFloat C Number D Math.floor 正确答案: D 3.alert(username);var username=“leson”;结果为 A undefined B leson C null D 报错 正确答案: A 解析: 变量提升,预解析 4.不属于常

陈乾的博客 1万+

C#与欧姆龙PLC 通信——fins udp协议

该调试助手专门为了帮助大家学习以及测试Fins-Udp通信,下面进行详细介绍。

qq_34059233的博客 2825

JavaScriptthis指向问题

箭头函数本身没有this,箭头函数中的this与上级作用域中的this相同。函数还可以作为某个对象的方法调用,这时this指向这个调用函数的对象。bind方法会将函数的this,永久捆绑在指定的对象上,不能改变。在let中声明的箭头函数,存储在脚本作用域中,

m0_72752380的博客 1895

this指向及强制性修改this指向的三种方法详解

this指向修改this指向方法

前端泡面人 886

this 指向以及修改this 指向方法

this指向的学习,以及修改this指向方法

王小涵的笔记的博客 1093

JavaScript基础:this 指向问题

一、常见错误理解 this指向自身吗? 特别是在函数中使用 this 的时候,this 是指的所在的这个函数对象吗?看下面示例: function test() { console.log(this.name) } test.name='aaaa' test() // '' 输出的是空字符串,因为此时 this 指向的是 window ,所以 this 并不是指向自身 this指向函数的作用域吗? function test() { var name = 'bbbbb' conso.

imagine_tion的博客 1342

js——关于this指向问题修改this指向

文章目录一、this指向问题二、修改this指向的放1.使用箭头函数2. call关键字3. apply关键字4. bing关键字总结 一、this指向问题 this指向问题,在于他他被那个函数调用了就指向那个函数 在全局条件下的指向为当前的视窗Window,但是这样就会造成在this指向达不到我们的要求,还有就是需要改变this的指针方向在达到某些需求。 二、修改this指向的放 1.使用箭头函数 箭头函数里面的this指向不是在于谁调用了函数而是根据函数的上下文来觉定 2. call关键字

fdadfas的博客 396

JavaScript中的this指向问题this指向修改

面向对象语言中 this 表示当前对象的一个引用。 但在 JavaScriptthis 不是固定不变的,它会随着执行环境的改变改变。 在方法中,this 表示该方法所属的对象。 如果单独使用,this 表示全局对象。 在函数中,this 表示全局对象。 在事件中,this 表示接收事件的元素。 在显式函数绑定时,我们可以自己决定this指向 实例 var person = { firstName: "LeBron", lastName : "James", id : 8

weixin_43499659的博客 737

JavaScript中函数this指向修改this指向,闭包,深浅拷贝等问题

1.函数的this指向问题 this在不同的函数下,代表的也不同,大概整理了以下几种。 <!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,

dimingda的博客 214

JS中的this指向问题(包括定时器中的this指向修改问题六、七)

  目录 一、全局作用域中 二:闭包中指window 三:函数调用模式:谁调用就指谁 四:构造函数中,this指实例对象。 五:apply/call改变this指向 六:定时函数中:this指向window 七:bind改变this指向 八:ES6箭头函数:函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。箭头函数的最大作用就是this指向 https:/...

qq_42204313的博客 2092

JS高级----this指向问题和动态修改this指向

普通函数内: function study() { console.log(this); } let study1 = function() { console.log(this); } study(); // window 对象 study1(); // window 对象 let user = { name: 'zs.

bjsyc123456的博客 526

JavaScript this指向及其修改this指向问题(call apply bind)

1. this指向 一、普通函数调用 —指向它的调用者,如果没有调用者则默认指向window. 二、对象函数调用 —哪个对象调用,this指向哪里 三、构造函数调用 四、apply和call调用 五、箭头函数调用 — 没有this,默认继承外面的this,默认指向在定义它时所处的对象 如果使用node,node中没有window对象,会显示undefined call、apply、bind区别 call 和 apply 的作用,完全一样,唯一的区别就是在参数上面。 call 接收的参数不固定,第一个

苍山负雪_Stacking 174

js中this指向问题

在js中,this关键字的指向一个比较重要的概念,它的值取决于函数的调用方式。

weixin_46541579的博客 1324

JS中关键字this指向修改

一、在调用时修改:call()与apply() var obj1 = { age : 10, say : function(){console.log(this.age);} } var obj2 = {age : 20,} obj1.say.call(obj2); // 20 //(call()能在调用的时候修改this指向) obj1.say.apply(obj2); // 20 //(a...

PrisonersDilemma的博客 293

Javascriptthis指向问题

普通函数时,this指向window <script> function test() { console.log('=== test this: ', this) } test() const test1 = function () { console.log('===test1 this: ', this) } test1() &

Celester_best的博客 2044

一次搞懂this指向问题

【代码】一次搞懂this指向问题

小虾的博客 949

JavaScript中的this到底指向谁?

很多初学JavaScript的小伙伴,都找不准函数或者方法中的this到底指向谁,其实并没有那么复杂,只需要记住一个口诀就能正确找到this指向:不管函数或者方法是如何声明的,要看这个函数或者方法最终是谁调用的,**谁最终调用这个函数或方法,那么这个函数或方法中的this就是谁**.   下面从函数调用方式着手详细给大家介绍一下这个口诀.   1. 作为普通函数中的this 示例代码 ...

qq_39581763的博客 882

js中this指向、拷贝以及构造函数实例对象

JavaScript对象中的this指向及其修改 置顶 2019年05月21日 19:06:57 一名资深的前端开发小白 ...

seiEight的博客 1023

js中关于this指向问题总结

记录关于this指向问题的学习 1.普通函数内部的this指向调用它的对象 function fn() { console.log(this) }; fn() // window // 直接调用,实际上是window在调用它 function fn() { console.log(this); } let a = { fn }; a.fn(); // {fn: ƒ} // 将fn赋给对象a的fn属性,调用a.f

Combarlala的博客 342

微信小程序:与JavaScriptthis有关的问题

在微信小程序开发中有一些函数中涉及到对page中data的数据进行修改(setData),之前没有注意,常常就直接写作this.setData(),也没有考虑过this具体指的是什么,直到最近一次设置数据一直没有预期效果,反复排查后问题出在this上,发觉还是JavaScript的基础知识掌握不到位,于是又查阅资料重新学了一遍。

2301_80482040的博客 997

JavaScript - this指向

JavaScript - this指向说明

埥芓的博客 82

Wireshark-win64-4.0.0.exe

Wireshark-win64-4.0.0.exe 适用于Windows x64位系统。它是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。

解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。unnpk.zip

这个C#实现的小游戏是一个简单的猜数字游戏,让玩家猜一个1到100之间的随机生成的数字。以下是对这个小游戏的分析:Random 类的使用:游戏开始时,使用 Random 类生成一个1到100之间的随机数作为要猜的数字。循环结构:游戏使用 while 循环,直到玩家猜对为止。玩家每次猜测后,根据猜测的数字与目标数字的大小关系,给出相应的提示,并根据猜测结果决定下一步的操作。用户输入处理:通过 Console.ReadLine() 获取用户输入,并使用 int.TryParse() 方法将输入转换为整数。如果用户输入无效,会提示用户输入有效的数字。游戏逻辑:根据玩家猜测的数字与目标数字的大小关系,给出相应的提示,提示玩家猜的数字是太高了还是太低了。【引流】Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes

上一篇: 基于Vue3 Sku的设计
惊&鸿
博客等级 码龄8年 16粉丝 · 10原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值