JS函数的call和apply的实现方法区别分析
方法示例
//apply用法
function A(alpha,age){
this.name = 'bob';
alert(alpha + arguments[1] + this.name)
}
(function(){
A.apply(this,['a',25])
})()
//call方法
function B(alpha){
this.name = 'alice';
alert(alpha + this.name)
}
(function(){
B.call(this,'b')
})()
//普通函数
function love(alpha){
this.name = 'alice';
alert(alpha + this.name)
}
(function(){
love.call(this,'love')
})()
//async函数
async function create(alpha){
this.name = 'op';
var res = await compute();
alert(alpha + this.name + res)
}
(function(){
create.call(this,'b')
})()
//generator函数
function * gen(num){
console.log(num);
num ++;
yield 'first'
yield 'then'
yield 'final'
return num
}
(function(){
gen.call(this,0)
})()
let it = gen(3);
console.log(it.next()) // {value: "first", done: false}
console.log(it.next()) // {value: "then", done: false}
console.log(it.next()) // {value: "final", done: false}
console.log(it.next()) // {value: "4", done: true}
function compute(){
var num = 0;
for(let i = 0; i < 10 ; i++){//1+2+3+4+5+ ... + 9 =>(1+9)*9/2 = 45
num += i;
}
return num
}apply和call方法的相同点
可以使得宿主(当前函数对象)在其自己作用域进行执行,比如在第一个实例中,使用call和apply的第一个参数context(上下文),也可称为this对象,传递给构造函数A,此时this的作用域为当前构造函数A下。
不同点
传递的参数不同,call第二个参数传递的可以是任何数据类型 函数、数组...,而apply传递的是必须是数组或者类数组。
两个方法该如何选择?
根据你要传入的参数来做选择,不需要传参或者只有1个参数的时候,用call,当要传入多个对象时,用apply
以上就是JS函数的call和apply的实现方法区别分析的详细内容,更多关于JS函数call apply方法的资料请关注脚本之家其它相关文章!
相关文章
JavaScript+html5 canvas绘制渐变区域完整实例
这篇文章主要介绍了JavaScript+html5 canvas绘制渐变区域的方法,结合完整实例形式分析了canvas颜色调用与图形绘制的相关技巧,需要的朋友可以参考下2016-01-01
javascript中alert()与console.log()的区别
我们在做js调试的时候使用 alert 可以显示信息,调试程序,alert 弹出窗口会中断程序, 如果要在循环中显示信息,手点击关闭窗口都累死。而且 alert 显示对象永远显示为[object ]。 自己写的 log 虽然可以显示一些 object 信息,但很多功能支持都没有 console 好2015-08-08
inputSuggest文本框输入时提示、自动完成效果(邮箱输入自动补全插件)
inputSuggest在文本框输入字符时提示,类似Windows的“自动完成”功能,当在文本框输入字符时,与此相关的内容会显示在文本框的下边,你可随时使用键盘或鼠标点选那些提示,你就不用输入了2012-05-05
强大的JavaScript响应式图表Chartist.js的使用
本篇文章主要介绍了强大的JavaScript响应式图表Chartist.js的使用,具有一定的参考价值,有兴趣的可以了解一下2017-09-09


最新评论