this关键字指向及call和apply

简介: this关键字指向及call和apply

this关键字指向

🍕默认绑定

默认指向全局window对象,但是在严格模式下this默认为undefined

function test(){
            console.log(this);
        }
test()
//window

🍟隐式绑定

当调用对象中的方法时,因为方法在对象内,所以此时方法中的this即为对象

var test ={
        name:'小明',
        height:165,
        weight:120,
        detail:function(){
            console.log('姓名'+this.name);
            console.log('身高'+this.height+'厘米');
        }
     }
test.detail()
//姓名小明
//身高165厘米
//可以看出this指的是test对象
//相当于  this.name =》name =》'小明'

🌭硬绑定

通过call,apply方法来改变this指向

 var testName = {
       name:'小明',
       sayName:function(){
            console.log('第一位考生是'+this.name);
       }
 }
 var test1 = {
     name:'小白'
 }
 var test2 = {
     name:'小红'
 }
testName.sayName.apply(test1)
testName.sayName.call(test2)
//第一位考生是小白
//第一位考生是小红
//可以看出在使用apply时,this指向即为test1对象,使用call时this指向也发生了变化,指向了test2对象

🍿构造函数绑定

🎄将变量名实例化,此时this会和实例化后的新对象紧紧绑定在一起,这样即使出现同名的变量也不会有影响


补充

🍗fn.call()

通过call()可以使用另一个对象方法,即改变this

✨1. 将this关键字改为call方法的第一个参数

✨2. 获取call方法第二个及以后的参数

✨3. 执行要操作的函数,并把第二个及以后的参数传递给函数


🍠 fn.apply()

🎀和apply方法大致相同,但是第二个参数为一个数组,即call()分别接收参数,而apply()是将要传给fn的参数放在一个数组中

var person = {
            fullName: function (city, country) {
               console.log( this.firstName + " " + this.lastName + "," + city + "," + country);
            }
        }
        var person1 = {
            firstName: "Bill",
            lastName: "Gates"
        }
person.fullName.apply(person1, ["Oslo", "Norway"]);
//Bill Gates,Oslo,Norway


相关文章
|
人工智能 数据可视化 数据挖掘
我的私人AI助理 | 办公小浣熊
【8月更文挑战第1天】如何利用AI智能化办公工具来快速实现表格数据分析,数据趋势预测,帮助管理者做出重大决策等内容
|
开发框架 .NET C#
探索VB.NET:了解.NET Framework下的Visual Basic
【4月更文挑战第27天】Visual Basic进化为VB.NET,融入.NET Framework,提供面向对象编程、泛型、LINQ等特性。VB.NET是强类型语言,支持类型推断,通过Windows Forms和WPF构建桌面应用。广泛应用于企业级、Web和数据处理开发,是易学且功能强大的编程工具。随着.NET版本更新,VB.NET的应用仍具价值,适合初学者和资深开发者。
368 1
|
存储 设计模式 安全
|
JavaScript 前端开发 数据安全/隐私保护
作为前端你还不懂MutationObserver?那Out了
[utationObserver构造函数用来监听DOM的变化,比如节点增加、删除,属性的改变,文本的变动都能监听到
378 1
作为前端你还不懂MutationObserver?那Out了
|
机器学习/深度学习 存储 数据采集
【英文文本分类实战】之二——数据集挑选与划分
【英文文本分类实战】之二——数据集挑选与划分
469 0
【英文文本分类实战】之二——数据集挑选与划分
|
域名解析 网络协议 算法
2023年阿里云免费SSL证书申请教程
2023年阿里云免费SSL证书申请教程,阿里云SSL免费证书在哪申请?一个阿里云账号一年可以申请20张免费SSL证书,很多同学找不到免费SSL的入口,阿小云来详细说下阿里云SSL证书免费申请入口链接以及免费SSL证书申请流程
10665 1
网络请求工具类WebServiceUtils
网络请求工具类WebServiceUtils
|
JavaScript 前端开发 编译器
温故而知新,浅入 Vue scoped 原理|8月更文挑战
通过这篇文章你将了解到: • Vue scoped 是什么? • Vue scoped 作用? • Vue scoped 原理? • 渲染的 HTML 标签上的 data-v-xxx 属性是如何生成的? • CSS 代码中的添加的属性选择器是如何实现的?
359 0
|
1天前
|
人工智能 运维 安全
|
4天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
374 124
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?