资讯专栏INFORMATION COLUMN

【常忘系列1】—Function.prototype里面的call和apply

BLUE / 2174人阅读

摘要:老是忘掉这两个东东的用下,写下来做个记录吧。如果第一个参数为,函数体内的指向宿主对象,在浏览器中是。和的用途改变指向上面的例子就是啦模拟

老是忘掉这两个东东的用下,写下来做个记录吧。
他们作用是一模一样的,只是传入的参数不一样

apply
apply接受两个参数,第一个制定了函数体内this对象的指向,第二个参数为一个带下标的集合(可遍历对象),apply方法把这个集合中的元素作为参数传递给被调用的函数:

var func = function(a, c, c){
    alert([a,b,c]); //[1,2,3]
}
func.apply(null, [1,2,3]);

call
call传入的参数不固定,和apply相同的是,第一个参数也是代表函数体内的this指向,第二个参数开始往后,每个参数被依次传入函数:

var func = function(a, b, c){
    alert([a,b,c]); //[1,2,3]
}
func.call(null, 1,2,3);

call是aplly的一颗语法糖。如果第一个参数为null,函数体内的this指向宿主对象,在浏览器中是window。

call和apply的用途
1.改变this指向
上面的例子就是啦

2.Function.prototype.bind
模拟Function.prototype.bind

Function.prototype.bind = function(context){
    var self = this;
    return function(){
        return self.apply(context, arguments);
    }
};

var obj = {
    name: "cxs"
};

var func = function(){
    alert(this.name); //cxs
}.bind(obj);

fun();

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

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

相关文章

  • 魔幻语言 JavaScript 系列call、bind 以及上下文

    摘要:那么,它到底是如何工作的呢让我们从一种更简单的实现开始实际上这种实现代码更短,并且更易读是函数原型中的一个函数,它调用函数,使用第一个参数作为参数,并传递剩余参数作为被调用函数的参数。 原文:The Most Clever Line of JavaScript 作者:Seva Zaikov 原文 最近 一个朋友 发给我一段非常有趣的 JavaScript 代码,是他在某个 开源库中...

    cuieney 评论0 收藏0
  • 我要懂系列1-callapply

    摘要:和相同点改变指向可以传参立即调用区别接收一个数组参数,直接接收参数的性能会比差,因为要对数组参数进行判断和解构模拟实现传递的如果是或者,那么就是,否则传递进来的就是要指向的从第二个参数开始就是要调用时用到参数的第二个参数为数组,数组中的元素 call和apply fn.call(isThis, arg1, arg2, ....) fn.apply(isThis, [arg1, arg2...

    Stardustsky 评论0 收藏0
  • JavaScript深入之callapply模拟实现

    摘要:深入系列第十篇,通过和的模拟实现,带你揭开和改变的真相一句话介绍方法在使用一个指定的值和若干个指定的参数值的前提下调用某个函数或方法。如果有错误或者不严谨的地方,请务必给予指正,十分感谢。 JavaScript深入系列第十篇,通过call和apply的模拟实现,带你揭开call和apply改变this的真相 call 一句话介绍 call: call() 方法在使用一个指定的 this...

    miya 评论0 收藏0
  • JavaScript深入之bind模拟实现

    摘要:也就是说当返回的函数作为构造函数的时候,时指定的值会失效,但传入的参数依然生效。构造函数效果的优化实现但是在这个写法中,我们直接将,我们直接修改的时候,也会直接修改函数的。 JavaScript深入系列第十一篇,通过bind函数的模拟实现,带大家真正了解bind的特性 bind 一句话介绍 bind: bind() 方法会创建一个新函数。当这个新函数被调用时,bind() 的第一个参数...

    FingerLiu 评论0 收藏0
  • javascript原生一步步实现bind分析

    摘要:绑定函数被调用时,也接受预设的参数提供给原函数。原型链官方文档上有一句话说明绑定过后的函数被实例化之后,需要继承原函数的原型链方法,且绑定过程中提供的被忽略继承原函数的对象,但是参数还是会使用。 bind 官方描述 bind() 函数会创建一个新函数(称为绑定函数),新函数与被调函数(绑定函数的目标函数)具有相同的函数体(在 ECMAScript 5 规范中内置的call属性)。当目标...

    coordinate35 评论0 收藏0

发表评论

0条评论

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