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

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会指向默认宿主对象...再比如我想求类数组中最大值 (function(){ var maxNum = Math.max.apply(null,arguments); console.log(maxNum);//56

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

    jscall和apply

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

    1.6K30

    JS 手写: call、apply、bind

    该方法语法和作用与 apply() 方法类似,只有一个区别,就是 call() 方法接受是一个参数列表,而 apply() 方法接受是一个包含多个参数数组。...# Try it apply() 方法调用一个具有给定 this 值函数,以及以一个数组(或类数组对象 (opens new window))形式提供参数。...call() 方法作用和 apply() 方法类似,区别就是 call() 方法接受是参数列表,而 apply() 方法接受是一个参数数组。...使用 apply, 可以只写一次这个方法然后在另一个对象中继承它,而不用在新对象中重复写该方法。 apply 与 call() 非常相似,不同之处在于提供参数方式。...arguments 是一个函数局部变量。 它可以被用作被调用对象所有未指定参数。 这样,在使用 apply 函数时候就不需要知道被调用对象所有参数。

    1.5K30

    划重点:jsthis、call、apply

    js中this有4种指向,分别为: 作为对象方法调用 作为普通函数调用 构造器调用 Function.prototype.call或Function.prototype.apply调用 1、当作为对象方法调用时...*/ 3、在构造器中调用this 先要理解js构造器。...关于apply或call,两者作用完全一致,都是更改调用apply或call函数体内this对象指向。...区别仅在于两者第二个参数传入不同: 1func.apply( 2 [参数一:将调用apply方法函数体内this对象指向改为指向本参数], 3 [参数二:传入调用apply方法函数体内参数集合...延伸应用: 理解了this、call、apply后,在实际js开发中,可以很方便实现对象继承 继承demo1: 1var Parent = function(){ 2 this.name

    97820

    JScall()和apply()方法

    JScall()和apply()方法 1、方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象一个方法,...apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某一对象一个方法,用另一个对象替换当前对象。...add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js函数其实是对象,函数名是对 Function 对象引用...18 { 19 Class10.call(this); 20 Class11.call(this); 21 } 很简单,使用两个 call 就实现多重继承了 当然,js...说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 第二个参数可以是任意类型,而apply第二个参数必须是数组,也可以是arguments 还有 callee,caller

    2.2K30

    Js apply() call()使用详解

    Js apply方法详解 我在一开始看到javascript函数apply和call时,非常模糊,看也看不懂,最近在网上看到一些文章对apply方法和call一些示例,总算是看有点眉目了,在这里我做如下笔记...主要我是要解决一下几个问题: apply和call区别在哪里 什么情况下用apply,什么情况下用call apply其他巧妙用法(一般在什么情况下可以使用apply) 我首先从网上查到关于apply...apply:方法能劫持另外一个对象方法,继承另外一个对象属性....,这个就是apply神奇之处....,param3…),所以可以根据刚才apply那个特点来解决 var max=Math.max.apply(null,array),这样轻易可以得到一个数组中最大一项 (apply会将一个数组装换为一个参数接一个参数传递给方法

    1.4K60

    JSbind、apply、call理解

    概要 call、apply、bind 都是用来修改函数中this, 传参时,call是一个个传参,apply是数组形式传参,call和apply立即执行并且返回值是你调用方法返回值,若该方法没有返回值...bind是改变this后返回一个新函数,他不会立即执行。 这三个方法不会改变原方法this指向。 Bind 复制原方法传入新this指向后生成新方法,参数可传多个。...b = { name: "小红" }; a.play("小刚", "小李"); a.play.call(b, "小刚", "小李"); 显示 小明和小刚、小李一块玩 小红和小刚、小李一块玩 Apply...调用原方法传入新this指向,第一个参数为this指向对象,第二个参数只能为一个数组。...(b, ["小刚", "小李"]); 显示 小明和小刚、小李一块玩 小红和小刚、小李一块玩 结论: call、apply、bind 是Function.prototype下方法,作用是执行一下目标函数

    95610

    jsthis、call、apply、bind、继承、原型链

    本文来自我github 0.前言 这些都是js基础进阶必备了,有时候可能一下子想不起来是什么,时不时就回头看看基础,增强硬实力。...= 1 } var f = new F() call、apply、bind 指向传入函数第一个参数。...return result } apply也是同理,而且少了数组这一步,更加简单接下来我们看一下bind怎么实现: Function.prototype.mybind = function(){...我们都可以实现,这里就不再重复 return f.apply(ctx,args1.concat(args2))//将预先填入参数和执行时参数合并 } } 此外,需要注意,一个函数被bind后...,以后无论怎么用call、apply、bind,this指向都不会变,都是第一次bind上下文 3.从call到继承 首先,js没有严格意义上子类父类,实现继承是依靠原型链来实现类似于所谓效果

    96010

    js中call、apply、bind那些事

    前言 回想起之前一些面试,几乎每次都会问到一个js中关于call、apply、bind问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...所以其实他们干的事从本质上讲都是一样动态改变this上下文,但是多少还是有一些差别的.. call、apply与bind差别 call和apply改变了函数this上下文后便执行该函数,而bind...call、apply区别 他们俩之间差别在于参数区别,call和aplly第一个参数都是要改变上下文对象,而call从第二个参数开始以参数列表形式展现,apply则是把除了改变上下文对象参数放在一个数组里面作为它第二个参数...,-8,687); 将伪数组转化为数组 js伪数组(例如通过document.getElementsByTagName获取元素)具有length属性,并且可以通过0、1、2…下标来访问其中元素...length属性 ) 数组追加 在js中要往数组中添加元素,可以直接用push方法, 1234567 var arr1 = [1,2,3];var arr2 = [4,5,6];[].push.apply

    1.7K50

    js中call、apply、bind那些事

    前言 回想起之前一些面试,几乎每次都会问到一个js中关于call、apply、bind问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...所以其实他们干的事从本质上讲都是一样动态改变this上下文,但是多少还是有一些差别的.. call、apply与bind差别 call和apply改变了函数this上下文后便执行该函数,而bind...call、apply区别 他们俩之间差别在于参数区别,call和aplly第一个参数都是要改变上下文对象,而call从第二个参数开始以参数列表形式展现,apply则是把除了改变上下文对象参数放在一个数组里面作为它第二个参数...,-67,5,7,6,-8,687); 将伪数组转化为数组 js伪数组(例如通过document.getElementsByTagName获取元素)具有length属性,并且可以通过0、1、2…下标来访问其中元素...length属性 ) 数组追加 在js中要往数组中添加元素,可以直接用push方法, var arr1 = [1,2,3]; var arr2 = [4,5,6]; [].push.apply

    1.6K60
    领券