宝哥软件园

深刻理解JavaScript中调用、应用、绑定方法的区别

编辑:宝哥软件园 来源:互联网 时间:2021-10-29

在JavaScript中,这一点是动态变化的,很可能在编写程序的过程中,这一点会被无意破坏。因此,我们需要一种能够固定这种含义的技术,所以我们有三种方法:调用、应用和绑定,来改变函数体中这一点,因为函数有“定义时上下文”、“运行时上下文”和“上下文可以更改”等概念。

申请、致电

应用:应用一个对象的方法并用另一个对象替换当前对象。

调用:调用一个对象的方法,用另一个对象替换当前对象。

function person(){ } person . prototype={ attr : { age :18,sex:'girl'},say : function(){ console . log(' My age is ' this . attr . age);console . log(‘我是‘this . attr . sex’);} } var Mary=new person();嫁给某人。//我的年龄是18//我是一个改变方向的女孩。

function person(){ } person . prototype={ attr : { age :18,sex:'girl'},say : function(){ console . log(' My age is ' this . attr . age);console . log(‘我是‘this . attr . sex’);}}小明={ attr : {age:20,sex: ' boy ' } }var Marry=新人();嫁给某人。打电话给(小明);//我的年龄是18//我是女生//我的年龄是20//我是男生有共同点。

可用于调用一个方法而不是另一个对象,将函数的对象上下文从初始上下文更改为由thisObj指定的新对象。

差异

1.apply:最多只能有两个参数:—— new this对象和一个array argArray。如果将多个参数传递给方法,所有参数都将被写入数组。当然,即使只有一个参数,也会写入数组。如果argArray不是有效数组或不是参数对象,将导致类型错误。如果既没有提供argArray参数,也没有提供thisObj参数,那么全局对象将被用作thisObj,并且不能传递任何参数。

fun.call(thisArg[,arg1[,arg2[,]])函数f(x,y){ console.log(x,y);}f.call(null,1,1)//return 2 2,call:是一个直接的参数列表,主要用于js对象的各种方法相互调用时,保持当前这个实例的指针一致,或者在特殊情况下改变这个指针。如果没有提供thiobj参数,全局对象将被用作thiobj。

fun.apply(thisArg,[argsArray])函数f(x,y){ console.log(x,y);} f.call (null,[1,1])//return2apply的功能与call相同,只是传入的参数列表形式不同,其中thisArg是您要指定的上下文,可以是任何一个JavaScript对象(JavaScript中的所有内容都是对象),call需要按顺序传入参数,而apply则将参数放在数组中。

如果一个函数的参数个数不固定,在清楚知道个数的时候用call,不确定的时候应用,然后把参数推入数组传进去。当参数数量不确定时,所有参数都可以在函数内部的参数数组中遍历。让我们来看看一些用法。

代码一

var array1=[12,' foo ',{name:'Joe'},-2458];var array2=['Doe ',555,100];array . prototype . push . apply(array 1,array 2);console . log(array 1);//[12,' foo ',object,-2458,' doe ',555,100]代码2。

var numbers=[5,458,120,-215];Math.max.apply(null,numbers);//458代码三。

log(12,' foo ',{name:'Joe'},-2458);函数log(){ var args=array . prototype . slice . call(参数);args . unshift('(app)');console.log.apply(console,args);};//(app) 12 foo对象{name: 'Joe'} -2458 bind

Fun.bind (thisarg [,arg1 [,arg2 [,])与上面不同的是,bind将返回一个新的函数来改变这一点。请注意,这里的重点是新函数,它与上一个函数的内存地址不同,因此当您需要重用该函数时,您必须将其保存到变量中,以便下次调用。以上两个函数是返回的执行结果,即调用和执行。

行,另外需要注意的是,bind函数中的第一个参数会自动成为新函数中返回参数的默认值,所以正式调用时,只需要给出除第一个参数以外的其余参数。

函数f(x,y){ console.log(x,y);} f.call (null,[1,1]) var new _ f=f.bind (null,1,1)//返回新函数new _ f(1)//返回2。应该注意的是,上述所有示例代码中的thisArg参数都被null替换。

比较应用、调用和绑定。

var obj={bar: '哎呀,这是个坏主意' };var foo={ get: function(){ return this . bar;}} var bind=foo.get.bind(obj),call=foo.get.call(obj),apply=foo . get . apply(obj);console.log(bind(),call,apply);console.log(绑定、调用、应用);console.log(绑定类型、调用类型、应用类型);console . log(bind类型(),call类型,apply类型);

看到区别了吗?不同的是,当您想要更改上下文时,它不会立即执行,而是通过回调执行,使用bind()方法。而apply/call将立即执行该函数。

应用、调用和绑定都是用来改变函数这个对象的指向。apply、call和bind的第一个参数是它指向的所有对象,即要指定的上下文;Apply、call和bind都可以用后续参数传递参数。Bind是返回相应的函数,方便以后调用。Apply,call就是立即调用上面的文章来深入理解JavaScript中的调用、应用和绑定方法。不同的是边肖与你分享的所有内容。希望能给大家一个参考,希望大家多多支持我们。

更多资讯
游戏推荐
更多+