call()、apply()、bind()的区别
函数对象方法
call()、apply()这个两个都是函数对象的方法、需要通过函数对象调用
当对函数调用call()和apply()、都会调用函数执行
/* call()和apply()是函数对象的两个方法 */ function fun(){console.log('我是fun函数'); } /* 正常调用 */ fun() //我是fun函数/* 使用apply和call调用 */ fun.call() //我是fun函数 fun.apply() //我是fun函数
函数的this指向
以函数形式调用时、this永远都是window
以方法的形式调用时、this是调用方法的对象
function fun(){console.log(this); } fun() //this=>指向windowlet obj = {}function fun1(){console.log(this); //this=>指向Objct }fun1.call(obj) //this指向obj fun1.apply(obj) this指向obj
在调用call()、apply()可以将一个对象指定为第一个参数。此时这个对象将会成为函数执行时的this.
/* 原本函数的指向永远都是window对象1、使用了call、apply。把里面的this指向改为obj2、所以此时的fun函数的this指向obj */ function fun(name,age){console.log(name); //zjfconsole.log(age); //18//现在的感觉就像是函数多了一个对象// 其实就是把原来指向window的this// 指向了那个对象console.log(this.name); //obj_name this.say() //obj_name 让我看康 } let obj = {name:'obj_name',say(){console.log(this.name,'让我看康');} } // 函数对象.call方法(对象||this它指向谁this就指向谁、后面跟参数) fun.call(obj,'zjf',11)
构造函数的this指向
以构造函数的形式调用、this就是新创建的那个对象
// 构造函数中的this function Person(name,age){this.name = namethis.age = age } /* 在obj对象里面有一个say方法使用的是this.name+‘字符’ */ let obj = {name:'obj_name',say:function(){console.log(this.name+'是say()方法');} } /* 使用new语句实例化一个对象此时p是构造函数实例化出来的一个对象而这个apply(对象),你写一个对象它的this指向就是指向的那个 */ let p = new Person('zjf',18)/* 现在的this指向的就是、构造函数中的this. */ obj.say.apply(p)//zjf是say()方法 obj.say.call(p)//zjf是say()方法
// 构造函数中的this
function Person(name,age){this.name = namethis.age = ageobj.say.apply(this)
}
/* 在obj对象里面有一个say方法使用的是this.name+‘字符’
*/
let obj = {name:'obj_name',say:function(){console.log(this.name+'是say()方法');}
}// obj.say()
/* 使用new语句实例化一个对象此时p是构造函数实例化出来的一个对象而这个apply(对象),你写一个对象它的this指向就是指向的那个
*/
let p = new Person('zjf',18)
//zjf是say()方法
总结:
- call和apply都是为了改变this的指向问题、在第一个参数里写那个对象、他们的this就指向谁、作用都一样。
- call的传参方式是直接写写在后面就可以了、但是apply只接受一个参数数组
- bind和其他两个方法作用也是一致的,只是该方法会返回一个函数。
call()、apply()、bind()的区别相关推荐
- 创建对象的方式以及call,apply,bind的区别
创建对象的方式有四种 1.直接量 var obj={ 属性名:属性 方法名:function(){} } 2.通过构造函数创建对象,这样能够批量创建多个具有相同属性的子对象(顺便介绍call,appl ...
- 前端学习(1115):call apply bind的区别
- call,apply,bind的区别
1 转载于:https://www.cnblogs.com/YangJonathan/p/11223641.html
- JS高级—call(),apply(),bind()
文章目录 call() 介绍 语法 特点 返回值 使用(主要应用) apply() 介绍 语法 特点 返回值 使用 bind() 介绍 语法 特点 返回值 使用 call(),apply(),bind ...
- javascript中apply、call和bind的区别
在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢. 在说区别之前还是先总结一下三者的相似之处: 1.都是用来改变函数的this对象的指向的. 2.第一个参数都是this要指 ...
- call(),apply()和bind()的区别和应用以及扩展
首先三个方法的作用: 1:都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域. 2:都是改变this的指向方向 区别: call()和apply()接受参数的方 ...
- call apply bind 的作用和区别
1.call apply bind 的作用和区别 作用: 都可以改变函数内部的this指向. 区别点: 1.call和apply会调用函数,并且改变函数内部this指向. 2.call和apply传递 ...
- call apply 和 bind的区别
apply 和call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Ja ...
- JavaScript中的call,apply,bind区别及应用(包含手写call/apply/bind)
目录 一.使用目的 二.三者分别是如何定义的及区别(摘自MDN) 三.在程序中收获 四.三者的具体应用 四.手写bind,apply,call 今天在读程序题的时候,遇到call,apply,bind ...
- call,apply,bind,new实现原理
在实际开发过程中,对于函数封装时,不确定外部是谁调用的,调用函数内部方法时,有可能是window调用这时就会报错,常使用call,apply,bind来绑定this指向. Function.proto ...
最新文章
- mysql max和order by_mysql – 为什么MAX()比ORDER BY慢100倍… LIMIT 1?
- 「后端小伙伴来学前端了」分析Vue脚手架结构
- 最严谨的校验email地址的正则表达式
- 数据库原理—常用的DBS产品简介(六)
- Objectove-c单例模式
- new hashmap 初始大小_你们要的HashMap工作原理!它来了!!!
- python的list()列表数据类型的方法详解
- mac 安装ps2017和破解教程
- 服务器价格指导 7月四路机架产品选购
- 信息学奥赛一本通pdf_新手如何参加信息学竞赛NOIP,怎么入门(常见问题解答)?...
- 计算机基础之二进制详解(二)
- R Fisher精确检验
- Python编程:腾讯防水墙原理浅析与Flask结合测试
- 零基础快速入门(二)爬取豆瓣电影——python爬虫实例
- 圆锥螺旋线matlab 画,圆锥螺旋线 - calculus的日志 - 网易博客
- Go命令行调用Python运行ParlAI模型,同步输入输出并调用百度翻译API翻译
- windows安装hadoop教程,带截图
- Python爬虫:和我一起学习scrapy(三)
- 测试 必问面经华子~
- 【半导体先进工艺制程技术系列】SOI技术(中)