首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

callapply

首先个人感觉callapply还是挺神奇的,简简单单就改变了this的作用域,下面我们来共同学习一下 1.callapply的语法(改变this的作用域,有点像冒充的感觉,例子如下) function.apply...(person ,["孙悟空","七十二变"]);// 这步改变了this的作用域,通俗的理解就是person对象冒充了People对象, 然后使用了People对象中的属性方法 people1...); 了解: 调用call的对象必须是个函数function call的第一个参数将会是function改变上下文后指向的对象, 第二个参数开始可以接收任意个参数...(person ,"啄木鸟","捉虫子"); people1.paly(); person.paly() 代码基本没变,就是把apply替换成了call作用相同,两者最大区别就是传递参数的方式不同..., 通俗说 call传递参数是直接用双引号,然后一个接着一个传递 apply传递参数是通过一个数组的形式传递

79630

js call apply

前言   call apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。   ...call apply二者的作用完全一样,只是接受参数的方式不太一样。...方法定义   apply   Function.apply(obj,args)方法能接收两个参数:     obj:这个对象将代替Function类里this对象   args:这个是数组或类数组,apply...call   call方法与apply方法的第一个参数是一样的,只不过第二个参数是一个参数列表   在非严格模式下当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象...,在浏览器中则是window var test = function(){ console.log(this===window); } test.apply(null);//true test.call

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    模拟实现 call apply

    模拟实现 call apply 本文参考:深度解析 call apply 原理、使用场景及实现 基础 首先来认识一下 call apply,它们都是 Function.prototype...作用都是用来显示绑定函数内部的上下文 this 的指向,区别仅在于两者对参数的处理不同,一个接收参数列表,一个接收参数数组。...} 1 2 所以 call apply 的执行效果其实是一样的,区别就在于接收参数的形式,是参数列表,还是参数数组。...要想模拟实现 call,必须得先掌握几个关键点: call 接收的参数形式含义,及 thisArg 对 null,undefined,基本类型的特殊处理 call 本质上是函数的另一种调用,只是修改了函数内的..., apply, bind, Reflect.apply) new 绑定(当函数 new 使用时会被当做构造函数,构造函数内部的 this 会绑定到内部新创的对象上) 箭头函数的绑定(绑定到箭头函数定义时的上下文

    40920

    javascript函数的callapplybind的原理及作用详解

    javascript函数的 callapplybind 本质是用来实现继承的,专业点说法就是改变函数体内部 this 的指向,当一个对象没有某个功能时,就可以用这3个来从有相关功能的对象里借用过来。...call call 方法使用一个指定的 this 值单独给出的一个或多个参数来调用一个函数: function.call(thisArg, arg1, arg2,...)...apply apply 方法调用一个具有给定 this 值的函数,以及以一个数组(或一个类数组对象)的形式提供的参数: function.apply(thisArg,[arg1, arg2]) call... apply 其实是同一个东西,区别只有参数不同,callapply 的语法糖,call 方法接受的是一个参数列表,而 apply 方法接受的是一个包含多个参数的数组 bind bind 方法创建一个新的函数...应用场景二:伪数组转化成真数组 一般用于dom节点列表、具有 length 序号属性的伪数组对象、函数参数 arguments Array.prototype.slice.apply(fakeArray

    23120

    JavaScript中的 Call Apply

    1. call apply的区别 Function.prototype.call Function.prototype.apply都是非常常用的方法,它们的作用一模一样,区别仅在于传入参数形式的不同...call传入的参数数量不固定,跟apply相同的是,第一个参数也是代表函数体内的this指向,从第二个参数开始往后,每个参数被依次传入函数: ?...当调用一个函数时,JavaScript的解释器并不会计较形参实参在数量、类型以及顺序上的区别,JavaScript的参数在内部就是用一个数组来表示的,从这个意义上来说,applycall的使用率更高...call是包装在apply上面的一颗语法糖,如果我们明确地知道函数接受多少个参数,而且想一目了然的表达形参实参的对应关系,那么也可以用call来传递参数。...有时候我们使用call或者apply的目的不在于指定this指向,而是另有有途,比如借用其也对象的方法,那么我们可以传入null来代替某个具体的对象: ? 2. callapply的用途 (1).

    59610

    快速搞懂callapplybind

    callapply callapply相信很多人用过,或者看源码看到过,在这里简单说说他们之间的关系。首先callapply都是改变this指向的api。...他的区别仅仅只是callapply的第二位参数起的差别。...(obj, arg1, arg2, arg3...); applyTest.apply(obj, [arg1, arg2, arg3]); 那么如果有一个问题,callapply之间,那个性能更高,你会怎么觉得呢...那么实际上callapply之间,其实是call的性能更好。为什么呢? 其实在底层运行上,apply在调用apply的时候,还需要对传入的第二个参数进行解构赋值。..., [].slice.call(arguments))); } } 所以bind的实现也是相当简单的,只要清楚callapply以及bind的原理,即可手写一个bind出来。

    18920

    apply()、call()、bind()

    apply()、call()、bind() 每个Function对象都存在apply()、call()、bind()方法,其作用都是可以在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域...使用 apply()、call()、bind()都能改变函数对象的this指向 window.name = "A"; //挂载到window对象的name document.name = "B"; //...(document); //B //绑定document对象 rollCall.sayName.apply(s); //C //绑定自定义对象 // call rollCall.sayName.call...()、call()、bind()都能够达到改变this指针的目的,但是其使用还是有区别的 // applycall传参方式不同 window.name = "Teacher"; var rollCall...将参数作为一个数组传递 rollCall.sayAllName.apply(window,["A","B","C"]); // Teacher A B C // call 将参数直接传递,使用逗号分隔

    70520

    js中的callapply

    一、callapply简介 call() apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。 两个方法都使用了对象本身作为第一个参数。...两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。...二、callapply的相同点不同点 1. 区别 call传递的参数是序列1,2,3,4 apply传递的参数是集合型[1,2,3,4] 2....相同点 callapply是替换前面函数内部的this指针以及传递参数。 功能:可以自动执行前面的函数 都有两个参数:a. 替换的对象 b....console.log(this,a,b,c);//{name: "张三", age: 20} 1 2 3 } method.call(obj,1,2,3); 方法2:使用apply

    1.6K30

    js call()、apply()、bind()用法区别

    1. call() 语法: fun.call(thisArg,arg1,arg2,…) fun: 表示一个函数 thisArg: this要指向的对象,如果是null undefined,则指向window...特性: fun.call(thisArg,arg1,arg2,…) 会立即调用fun函数; call 方法将一个函数的对象上下文从初始的上下文改变为由 thisArg 指定的新对象,如果没有提供 thisArg...: this要指向的对象,如果是null undefined,则指向window全局对象; 参数是一个数组。...obj return: 3 3. bind() 语法: fun.bind(thisArg,[arg1,arg2,…]) fun: 表示一个函数 thisArg: this要指向的对象,如果是null ...()、apply()bind()的应用 1. call() call 常用来继承,因为ES6之前没有extends,用构造函数来模拟继承。

    1.1K30

    callapply,bind详解

    我们知道bind,callapply作用都是用来改变this指向的,那为什么要改变this指向呢?...call方法 call方法的第一个参数也是this的指向,后面传入的是一个参数列表(注意apply传参的区别)。...当一个参数为null或undefined的时候,表示指向window(在浏览器中),apply一样,call也只是临时改变一次this指向,并立即执行。...bind方法 bind方法call很相似,第一参数也是this的指向,后面传入的也是一个参数列表(但是这个参数列表可以分多次传入,call则必须一次性传入所有参数),但是它改变this指向后不会立即执行...三者都可以传参,但是apply是数组,而call是参数列表,且applycall是一次性传入参数,而bind可以分为多次传入。

    85410

    callapply、bind的应用区别

    1. call( ) 面试中常问的Js中关于callapply、bind的问题,比如: 怎么利用callapply来求一个数组中最大或者最小值 如何利用callapply来做继承 applycall...说到底就是实现了复用 2. bind( ) bind方法是事先把fn的this改变为我们要想要的结果,并且把对应的参数值准备好,以后要用到了,直接的执行即可,也就是说bind同样可以改变this的指向,但apply...区别 上面看起来三个函数的作用差不多,干的事几乎是一样的,那为什么要存在3个家伙呢,留一个不就可以。...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. ① callapply与bind的差别 callapply改变了函数的this上下文后便执行该函数,而bind...② callapply的区别 他们俩之间的差别在于参数的区别,callapply的第一个参数都是要改变上下文的对象,而call从第二个参数开始以参数列表的形式展现,apply则是把除了改变上下文对象的参数放在一个数组里面作为它的第二个参数

    38150

    JS中的call()apply()方法

    JS中的call()apply()方法 1、方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,...apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。...如果没有提供 argArray thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。...16 //输入结果为"Cat" 17 animal.showName.call(cat,","); 18 //animal.showName.apply(cat,[]); call...说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments 还有 callee,caller

    2.2K30
    领券