[JS]this关键字以及call()、apply()、bind()比较

2024-08-20 22:48
文章标签 比较 js bind 关键字 call apply

本文主要是介绍[JS]this关键字以及call()、apply()、bind()比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

面向对象语言中 this 表示当前对象的一个引用。
但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

1、在方法中,this 表示该方法所属的对象。
2、如果单独使用,this 表示全局对象。
3、在函数中,this 表示全局对象。
4、在函数中,在严格模式下,this 是未定义的(undefined)。
5、在事件中,this 表示接收事件的元素。
6、类似 call() 和 apply() 方法可以将 this 引用到任何对象。

先看一下正常情况下this的绑定对象情况
例一

var postcode = "400000";
function lookPostcode () {console.log(this.postcode); // this指向window
}
lookPostcode(); // 输出:400000

例二

var province = "重庆市";
var city = "重庆";
var area = "82402平方千米";var tempObj = new Object();
tempObj.city = "成都";
tempObj.province = this.province;           // this指向window
tempObj.tempFun = function () {console.log(this.city+" 面积:"+this.area); // this指向tempObj
}console.log(tempObj.province);  // 输出:重庆市
tempObj.tempFun();              // 输出:成都 面积:undefined

在JS中函数也是对象有方法,apply()和call()就是函数对象的方法。他们允许切换函数执行时this绑定的对象。
call()apply()bind() 重新定义this比较
bind返回的是一个函数需要加”()“去执行

var newObj = new Object();
newObj.city = "武汉";
newObj.area = "8569.15平方千米";tempObj.tempFun.call(newObj);   // 输出:武汉 面积:8569.15平方千米
tempObj.tempFun.apply(newObj);  // 输出:武汉 面积:8569.15平方千米
tempObj.tempFun.bind(newObj)(); // 输出:武汉 面积:8569.15平方千米

 call()apply()bind() 传参比较

1.

var province = "重庆市";
var city = "重庆";
var area = "82402平方千米";var tempObj = new Object();
tempObj.city = "成都";
tempObj.province = this.province;
tempObj.tempFun = function (code,direction) {console.log(this.city+" 面积:"+this.area+" 邮政编码:"+code+" 方位:"+direction);
}var newObj = new Object();
newObj.city = "武汉";
newObj.area = "8569.15平方千米";tempObj.tempFun.call(newObj,"430000","中南部");     // 输出:武汉 面积:8569.15平方千米 邮政编码:430000 方位:中南部
tempObj.tempFun.apply(newObj,["430000","中南部"]);  // 输出:武汉 面积:8569.15平方千米 邮政编码:430000 方位:中南部
tempObj.tempFun.bind(newObj,"430000","中南部")();   // 输出:武汉 面积:8569.15平方千米 邮政编码:430000 方位:中南部

2.

var tempArr = [2,53,63,34,24,75];
// 返回 x,y,z,...,n 中的最高值
console.log(Math.max.apply(null,tempArr)); // 输出:75
// 返回 x,y,z,...,n 中的最小值
console.log(Math.min.apply(null,tempArr)); // 输出:2console.log(Math.max.call(null,75,2)); // 输出:75
console.log(Math.min.call(null,75,2)); // 输出:2console.log(Math.max.bind(null,75,2)()); // 输出:75
console.log(Math.min.bind(null,75,2)()); // 输出:2

 

这篇关于[JS]this关键字以及call()、apply()、bind()比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091397

相关文章

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

Java中的volatile关键字多方面解析

《Java中的volatile关键字多方面解析》volatile用于保证多线程变量可见性与禁止重排序,适用于状态标志、单例模式等场景,但不保证原子性,相较synchronized更轻量,但需谨慎使用以... 目录1. volatile的作用1.1 保证可见性1.2 禁止指令重排序2. volatile的使用

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL中比较运算符的具体使用

《MySQL中比较运算符的具体使用》本文介绍了SQL中常用的符号类型和非符号类型运算符,符号类型运算符包括等于(=)、安全等于(=)、不等于(/!=)、大小比较(,=,,=)等,感兴趣的可以了解一下... 目录符号类型运算符1. 等于运算符=2. 安全等于运算符<=>3. 不等于运算符<>或!=4. 小于运

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1