资讯专栏INFORMATION COLUMN

js中的call()、apply()和bind()

flyer_dev / 3319人阅读

摘要:方法都保存在函数的名下因此每个函数都可以直接调用。都用于改变函数的执行环境。和和实际功能一致。输出结果为输出结果为在非严格模式下,等价于和必须把函数参数写全,否则无法正确运行。对的,只是创建一个函数实例,因此一般需要以值的形式传递之。

方法call()、apply()、bind()都保存在函数的prototype名下(因此每个函数都可以直接调用)。都用于改变函数的执行环境。

call()和apply()

call()和apply()实际功能一致。
call()和apply()在原函数拥有参数的时候,不能只有一个参数了。

function add(num1,num2){
    console.log(num1+num2);
}
function show(num1,num2){
    return add.call(null,num1,2);
}
show(2,3); //输出结果为4

function add(num1,num2){
    console.log(num1+num2);
}
function show(num1,num2){
    return add.call(null,num1);
}
show(2,3); //输出结果为NAN

在非严格模式下,call(null) 等价于 call(this) 和 call(undefined)
call()必须把函数参数写全,否则无法正确运行。
apply()可以理解为,第二个参数如果需要,必须传入全部参数组成的一个数组,或者arguments。

bind()

call()和apply()是直接调用,而bind()的作用:创建一个函数的实例,执行环境变为bind的参数。对的,只是创建一个函数实例,因此一般需要以值的形式传递之。

var cat = {color:"blue"};
window.color = "red";
function showColor(){
    console.log(this.color);
}
showColor.bind(cat);   //没有任何输出
showColor.bind(cat)(); //输出blue
var newShowColor = showColor.bind(cat);
newShowColor();        //输出blue

bind()可用于setTimeout()、setInterval()或者事件处理(document),被绑定的函数也会用掉更多的内存。

自定义的bind()
function bind(fn,arg){
    return function(){
        return fn.apply(arg,arguments);
    }
}

这里的arg是执行环境对象,arguments是fn函数本身的参数。
bind(showColor,cat);等价于showColor.bind(cat);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93068.html

相关文章

  • 理解JavaScript中的call,applybind方法

    摘要:输出的作用与和一样,都是可以改变函数运行时上下文,区别是和在调用函数之后会立即执行,而方法调用并改变函数运行时上下文后,返回一个新的函数,供我们需要时再调用。 前言 js中的call(), apply()和bind()是Function.prototype下的方法,都是用于改变函数运行时上下文,最终的返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。这几个方法...

    chaosx110 评论0 收藏0
  • jscallapplybind那些事

    摘要:应用场景求数组中的最大值和最小值并不是最佳选择是中的静态方法,因此必然是没有使用上下文的必要的。因此绑定只需要用或者占位就可以了。 前言 面试,几乎每次都会问到一个js中关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply、call、bind的区别和主要应用场景 作用 首先问个问...

    shiyang6017 评论0 收藏0
  • JS中的call(),apply()bind()方法

    摘要:奔着一星期彻底弄清楚一个小知识点的目的这次的目标是方法在实际项目中经常会用到这三个函数只是简单的知道都是用来进行上下文绑定的这三个函数都可以实现现在看来这三者还是有很大区别的特别是和其他两个的区别先说和目的是改变函数的执行上下文下面列举一些 奔着一星期彻底弄清楚一个javascript小知识点的目的,这次的目标是call apply bind方法 在实际项目中,经常会用到这三个函数,只...

    nifhlheimr 评论0 收藏0
  • JS中的callapplybind方法详解

    摘要:不能应用下的等方法。首先我们可以通过给目标函数指定作用域来简单实现方法保存,即调用方法的目标函数考虑到函数柯里化的情况,我们可以构建一个更加健壮的这次的方法可以绑定对象,也支持在绑定的时候传参。原因是,在中,多次是无效的。 bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 apply、call 在 javascript 中,call 和 apply 都是...

    zombieda 评论0 收藏0
  • JS系列之call & apply & bind

    摘要:参考链接在中,和是对象自带的三个方法,都是为了改变函数体内部的指向。返回值是函数方法不会立即执行,而是返回一个改变了上下文后的函数。而原函数中的并没有被改变,依旧指向全局对象。原因是,在中,多次是无效的。 参考链接:https://juejin.im/post/59bfe8... 在JavaScript中,call、apply和bind是Function对象自带的三个方法,都是为了改变...

    xiaochao 评论0 收藏0

发表评论

0条评论

flyer_dev

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<