js函数中两个比较有趣的方法:apply()和call()

来源:互联网 发布:淘宝店logo生成器 编辑:程序博客网 时间:2024/06/05 18:25

js函数中两个比较有趣的方法:apply和call

apply()和call()这两个方法都是每个函数自带的方法,作用是在特定的作用域中调用这个函数。不明白的同学可以这样理解:

学校要体检,咱们是同学,不巧的是今天我嗓子疼,不能说话。这个时候体检老师问我姓名。。。

// 由于我不能说话,所以没有sayName这个方法var me = {  name: "王某某"}var you = { name: "李某某", sayName: function(){     console.log(this.name) }}

这个时候怎么办,你肯定得帮我啊
于是乎:

you.sayName();you.sayName.call(me);------------>输出:李某某王某某

你先是说出了自己的名字,然后替我说出了我的名字

例子可能举得不好,但是同学们应该能明白call能做什么了。

call和apply的作用与结果都是一样的,只不过用法不太一样。
他们的共同作用就是:设置函数体内this对象的值

用法

apply

apply()接受两个参数,第一个是指定函数发生的作用域,第二个参数是可以是数组,也可以是arguments对象。当函数执行时,会将apply()的第二个参数作为函数执行所需要的参数。

function connectStr(){   var ret = '';   // 把传进来的所有字符串连接起来   if(!arguments.length) return ret;   for(let i=0;i<arguments.length;i++){     ret+=arguments[i];   }   return ret; } function callConnectFunc(str1,str2){   // 这里的this指的是window(严格模式下会是undefined)   console.log(connectStr.apply(this, [str1,str2]));   // 会发现两种调用它结果是一样的   console.log(connectStr.apply(this, arguments)); } callConnectFunc('1','2'); ------------>输出:1212

下面我们赶紧来看看call是怎么调用的把

call

call()方法的第一个参数与apply相同,都是指调用call或apply的函数的函数体内this对象的值。但是call()方法从第二个参数以后都代表执行函数要传递的参数(就是apply第二个参数,一一罗列出来)

function callConnectFunc(str1,str2){  // 这里用call来调用原函数,但是要把所有参数一一列举出来,对于不明确参数个数时不太合适  console.log(connectStr.call(this, str1, str2));}callConnectFunc('1','2'); ------------>输出:12
原创粉丝点击