jsapply(js中call和apply的区别)
本文目录
js中call和apply的区别
JS中有时常用到 apply 和 call 两个方法,搜索网上很多,整理如下,简单看看这两个联系和区别,
联系:
网上查到关于apply和call的定义:这两个方法都能劫持另外一个对象的方法,继承另外一个对象的属性.
xxxFunction.apply(obj,args) 方法接收两个参数obj:这个对象将代替xxxFunction类里this对象,也即xxxFunction类(函数)里的this不在是指 xxxFunction 本身,而是obj;args:这个是数组类型的参数,它将作为参数传给Function(args --》 arguments)结果是还是执行 xxxFunction 类方法(函数)的功能,只不过该 xxxFunction 函数以另一个目标对象和一个数组作为参数传递进 xxxFunction 函数,xxxFunction函数里面的 this 是传进的目标对象,二不是 xxxFunction 本身;
call:和apply类似的,只不过是参数列表不一样.
xxxFunction.call(obj,作为参数传递进 xxxFunction 函数,xxxFunction函数里面的 this 是传进的目标对象,二不是 xxxFunction 本身;
区别:
用法上不同,主要是参数不完全同
举例:
function Person(name,age) {
this.name=name;
this.age=age;
this.money = 500;
}
function myFun(money) {
alert(this.money);
}
var money = 100;
myFun(money);
//return 100; //window.myFun(money); save to myFun(money);
//这个时候this指向的是window对象,其实myFun函数和定义的var money = 100;都作为window对象子对象(即全局对象)
myFun.apply(window,); //save to window.myFun.apply(window,);
//return 100; //同上
myFun.apply(new Person(’zhangsan’,23),);
//return 500, 空数组作为参数,仅符合语法要求
//这个时候myFun方法里面的this指向的是new Person(’zhangsan’,23)对象,二不是myFun类(函数),故弹出500
myFun.call(new Person(’zhangsan’,23),money,300,’mycardId’);
//return 500, 后面money,300和mycardId是参数列表作为参数,一一列出
//这个时候myFun方法里面的this指向的是new Person(’zhangsan’,23)对象,二不是myFun类(函数),故弹出500
js中apply和call的区别
一、call和apply的说明
call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。
语法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);
相同点:两个方法产生的作用是完全一样的。
不同点:方法传递的参数不同。
二、实例代码
《script type=“text/javascript“》function A(){this.flag = ’A’;this.tip = function(){alert(this.flag);};}function B(){this.flag = ’B’;}var a = new A();var b = new B();//a.tip.call(b);a.tip.apply(b);《/script》
三、代码解释(即说明apply和call作用)
实例代码定义了两个函数A和B,A中包含flag属性和tip属性(这个属性赋值一个函数),B中有一个flag属性。
分别创建A和B的对象a和b。
无论是a.tip.call(b);和a.tip.apply(b);运行的结果都是弹出B。
从结果中可以看出call和apply都可以让B对象调用A对象的tip方法,并且修改了this的当前作用对象。
js中call,apply和bind方法的区别和使用场景
1、call,apply和bind的区别它们在功能上是没有区别的,都是改变this的指向,它们的区别主要是在于方法的实现形式和参数传递上的不同。call和apply方法都是在调用之后立即执行的。而bind调用之后是返回原函数,需要再调用一次才行,2、①:函数.call(对象,arg1,arg2....)②:函数.apply(对象,)③:var ss=函数.bind(对象,arg1,arg2,....)3、总结一下call,apply,bind方法:a:第一个参数都是指定函数内部中this的指向(函数执行时所在的作用域),然后根据指定的作用域,调用该函数。b:都可以在函数调用时传递参数。call,bind方法需要直接传入,而apply方法需要以数组的形式传入。c:call,apply方法是在调用之后立即执行函数,而bind方法没有立即执行,需要将函数再执行一遍。有点闭包的味道。d:改变this对象的指向问题不仅有call,apply,bind方法,也可以使用that变量来固定this的指向。
js中的call和apply方法的区别
cal,apply,第一个传参就是内部改变this,区别在于给函数传参不一样。这里不讨论this,举例:function a(b,c){return b*c}a.call(null,2,3) === 6 a.apply(null,) === 6
更多文章:

infrastructure怎么读(infrastructure怎么读)
2025年4月9日 08:00

singular matrix(singular matrix 怎么解决)
2025年4月10日 15:50

country music(nation和country有什么区别,应用场景上有需要注意的么)
2025年2月10日 16:30

目前常用的原型设计软件有哪些?WeaselCoffee是神马
2025年2月19日 06:10

win7如何彻底清理c盘(win7c盘变红满了怎么清理不会删掉有用的)
2025年3月8日 19:10

nutritional什么意思(nutrient和nutrition的区别是什么)
2025年3月27日 08:20

jst连接器代理商(我是一名采购,听说现在的假货跟真的一样,我要如何分辨买回来的JST端子是真是假)
2025年2月25日 17:40

commando(电脑想升级,华硕commando主板最高能上什么CPU和显卡,内存)
2025年2月21日 22:40

做跨境电商用POD模式靠谱么?DNSPod的DNS地址是什么
2025年4月12日 21:50

socket error 11004(统一加速器出现Socket Error #11004 要咋么办)
2025年2月22日 21:00

在线编程课哪个比较好(最近想在线上给孩子报个编程课学习,请问有什么平台比较好的,好课测评这个平台如何)
2025年3月31日 05:20

machine tool(machine tools怎么样)
2025年2月28日 16:30

removeattr(jquery 的removeAttr和attr)
2025年2月28日 01:20

vaseline是什么意思(vaseline-original是什么意思)
2025年3月25日 06:00

jsoup模拟登录(求真正有效的可以模拟登录新浪微博的java代码,后续可以用Jsoup进行抓取急急!!登录成功马上给分!)
2025年3月25日 07:50