IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Javascript之bindcallapply方法的使用场景和区别 -> 正文阅读

[JavaScript知识库]Javascript之bindcallapply方法的使用场景和区别

Javascript之bind,call,apply方法的使用场景和区别

之前的文章里有写到上述三种方法的实现,这次就来对比下这三种方法。

入参语法出参
calln个参数,第一个参数为原函数的this指向,其余参数依次传入原函数中进行调用function.call(thisArg, arg1, arg2, …)函数执行结果
apply最多两个参数,第一个参数为原来函数的this指向,第二个参数是类数组或数组对象,解构后传入原函数进行调用func.apply(thisArg, [argsArray])函数执行结果
bindn个参数,bind中的第一个参数为原来函数的this指向,其余参数依次传入原函数中进行调用function.bind(thisArg[, arg1[, arg2[, …]]])一个新函数

这三者进行对比一般说的都是call和apply进行对比,bind和call进行对比。具体仔细看看上表写的东西哈。

相同点就是三者都修改了原函数的this指向,为什么这么做呢?按照我的理解来回答就是,共享方法节省内存

大家想一想,假如没有这种修改this指向的办法,而我们又想要打印一些变量的某些属性,是不是就得这么写了:

const teacher = {

name:'三上you亚',

age:'18'

}

function demo(){

console.log(teacher.name)

}

或者这么搞

const teacher = {
name:'三上you亚',
age:'18',
consoleName(){
  console.log(this.name)
}

}
teacher.consoleName()

很麻烦的好不好,而且每个变量我都这么搞是不是占用很多内存

优化一下啦,就成了,那干脆就这么写:

function test(params){
  console.log(params.name)
}
const teacher = {
name:'三上you亚',
age:'18'
}
test(teacher)

ok,这样确实简化了一些,但是我TM每次写一个项目还得创建test这个方法,项目多了这也很烦躁啊。干脆就加到原型上完事了,当然,而且加的话,肯定是加到Function上面啊,总不能加到Object的原型上吧,你能想象会有Object.prototype.[‘打印一些XX属性’]这样的方法吗

喏,这样就好理解了吧。

接下来说一下常见的一个例子:类数组对象使用slice方法

[].slice.call(arguments)

我们都知道啊,类数组对象跟数组不是一回事,只有length属性并且参数的key是从0开始,这两点跟Array一样,其他的方法并不具备,slice方法当然也就没有了。

但在函数中我们拿到arguments后常常需要做一些处理,这时候将他转换成一个数组会更方便一些。

而slice方法的实现则是按照key进行取值的,这个可以用到arguments上,如果我们slice时不填参数则会把arguments里面的value输出到一个数组中去,这样也就实现一个类数组对象转成一个数组对象的目的啦,是不是很奇妙呢

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:57:45  更:2022-01-16 13:00:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:53:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码