首先个人感觉call和apply还是挺神奇的,简简单单就改变了this的作用域,下面我们来共同学习一下 1.call和apply的语法(改变this的作用域,有点像冒充的感觉,例子如下) function.apply ); var person=new Object();//重新创建了一个对象 People.apply(person ,["孙悟空","七十二变"]);// 这步改变了this的作用域 ,通俗的理解就是person对象冒充了People对象, 然后使用了People对象中的属性和方法 people1.paly(); person.paly() </script 的对象必须是个函数function call的第一个参数将会是function改变上下文后指向的对象, 第二个参数开始可以接收任意个参数,这些参数将会作为function的参数传入function 调用 替换成了call,作用相同,两者最大区别就是传递参数的方式不同, 通俗说 call传递参数是直接用双引号,然后一个接着一个传递 apply传递参数是通过一个数组的形式传递
前言 call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。 call 和 apply二者的作用完全一样,只是接受参数的方式不太一样。 方法把这个集合中的元素作为参数传递给被调用的函数。 call call方法与apply方法的第一个参数是一样的,只不过第二个参数是一个参数列表 在非严格模式下当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象 有一个局部的fun方法,fun被作为普通函数调用时,fun内部的this指向了window,但我们往往是想让它指向该#test节点,见如下代码: window.id="window"; document.querySelector
代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!
1. call 和 apply的区别 Function.prototype.call 和 Function.prototype.apply都是非常常用的方法,它们的作用一模一样,区别仅在于传入参数形式的不同 apply接受两个参数,第一个参数指定了函数体内 this 对象的指向,第二个参数为一个带下标的集合,这个集合可以为数组,也可能为类数组,apply 方法把这个集合中的元素作为参数传递给被调用的函数: 当调用一个函数时,JavaScript的解释器并不会计较形参和实参在数量、类型以及顺序上的区别,JavaScript的参数在内部就是用一个数组来表示的,从这个意义上来说,apply比call的使用率更高 call是包装在apply上面的一颗语法糖,如果我们明确地知道函数接受多少个参数,而且想一目了然的表达形参和实参的对应关系,那么也可以用call来传递参数。 有时候我们使用call或者apply的目的不在于指定this指向,而是另有有途,比如借用其也对象的方法,那么我们可以传入null来代替某个具体的对象: ? 2. call和apply的用途 (1).
apply的具体实现 Function.prototype.apply = function(context, arr) { var context = Object(context) || window } result = eval('context.fn(' + args + ')') } delete context.fn return result } 复制代码 call 的具体实现 Function.prototype.call = function(context) { var context = context || window context.fn = this
一、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. console.log(this,a,b,c);//{name: "张三", age: 20} 1 2 3 } method.call(obj,1,2,3); 方法2:使用apply
call、apply和bind这三个方法经常使用,但是具体有什么区别呢? 首先这三个方法的用法比较相似,但是作用,bind和前两者则完全不同。 call和apply是调用函数,bind却是返回一个新的函数。 下面看一下MDN对三者的解释: call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。 apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。 下面总结了call和apply的一些常用的地方。 call和apply的相同点和不同点说完了,下面看一看bind的用法,前面一直重申函数调用bind后返回一个新的函数。并不像call和apply,直接调用函数。
13)call()和apply() call是在特定的作用域中调用函数。 name; } A.prototype.info = function() { /*如果下局解开屏蔽,最后结果则打印出就为A,结论就是在call 时,先在A里找this.name,如果找不着,则用b环境里找,现在A的构造函数从来没有执行过,所以最后用的是B环境的name,见下一个例子*/ //this.name=" A"; return "A的名字是 "+this.name; } function B(agev) { this.age
调用函数时, call和apply传递参数的方式不同 以名为showHide的函数为例: function showHide(name1, name2){ if(this.parentNode.parentNode.querySelector 可以按照顺序传递showHide.call(this, '桐人', '亚丝娜') apply则是将参数放到一个数组, 统一传递showHide.apply(this, ['上条', '御坂']) 用 call和apply实现相同的折叠的Demo ? (学生作为人体科学实验对象)。 </body> </html> 小结: 使用call和apply调用函数时, 往往需要传递一个this, 目的是确定被调用函数showHide运行时函数内部this的指向, 以上面的demo为例, 如果调用函数
我 在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示 例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享 什么情况下用apply,什么情况下用call 3. apply的其他巧妙用法(一般在什么情况下可以使用apply) 我首先从网上查到关于apply和call的定义,然后用示例来解释这两个方法的意思和如何去用. ) call:和apply的意思一样,只不过是参数列表不一样. 什么情况下用apply,什么情况下用call 在给对象参数的情况下,如果参数的形式是数组的时候,比如apply示例里面传递了参数arguments,这个参数是数组类型,并且在调用 Person的时候参数的列表是对应一致的
JS中的call()和apply()方法 1、方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法, apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。 Animal对象代替this对象,那么 Cat中不就有Animal的所有属性和方法了吗,Cat对象就能够直接调用Animal的方法以及属性了. 说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments 还有 callee,caller
1. call() 语法: fun.call(thisArg,arg1,arg2,…) fun: 表示一个函数 thisArg: this要指向的对象,如果是null 和 undefined,则指向window 参数,那么 Window对象被用作 thisArg; 将arg1等参数传递进fun函数中,返回fun函数的返回值。 thisArg 参数,那么 Window对象被用作 thisArg; 将数组传递进fun函数中,返回fun函数的返回值。 this的函数 newFun(); // 3 4. call()、apply()和bind()的应用 1. call() call 常用来继承,因为ES6之前没有extends,用构造函数来模拟继承。 () apply 常用于与数组有关的操作,因为传递的参数是数组。
模拟实现 call 和 apply 本文参考:深度解析 call 和 apply 原理、使用场景及实现 基础 首先来认识一下 call 和 apply,它们都是 Function.prototype 作用都是用来显示绑定函数内部的上下文 this 的指向,区别仅在于两者对参数的处理不同,一个接收参数列表,一个接收参数数组。 和 apply 的执行效果其实是一样的,区别就在于接收参数的形式,是参数列表,还是参数数组。 要想模拟实现 call,必须得先掌握几个关键点: call 接收的参数形式和含义,及 thisArg 对 null,undefined,基本类型的特殊处理 call 本质上是函数的另一种调用,只是修改了函数内的 ,this 会绑定到该对象上) 显示绑定(call, apply, bind, Reflect.apply) new 绑定(当函数和 new 使用时会被当做构造函数,构造函数内部的 this 会绑定到内部新创的对象上
返回值 call() 和 apply() 返回函数应该返回的值,bind() 返回一个经过硬绑定的新函数。 () 和 bind() 的第二个参数都是参数列表,而 apply() 则是参数数组(或者类数组)—— 尽管如此,在这些参数传递给调用函数时,仍然是以参数列表的形式传递的(这一点很重要)。 执行 call() 和 apply() 一经调用则立即执行函数,而 bind() 则只是完成了函数的 this 绑定。 应用场景 在这篇文章说过,call(),apply() 和 bind() 都可以改变 this 的指向,什么时候需要改变 this 的指向呢? 对于 Son 而言,其内部的 this 将指向稍后实例化的对象,利用这一点,我们在 Son 的内部通过 call() 或者 apply() 调用 Parent,同时传参 this,这样就可以增强子类实例
1、关于call()和apply()的疑点: apply和call的区别在哪里 什么情况下用apply,什么情况下用call apply的其他巧妙用法(一般在什么情况下可以使用apply) 2、语法和参数分析 : apply和call都能继承另外一个对象的方法和属性; Function.apply(obj,args)方法能接收两个参数 obj:这个对象将代替Function类里this对象 args:这个是数组 ,它将作为参数传给Function(args-->arguments) call:和apply的意思一样,只不过是参数列表不一样. call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 分析:即我没有的方法或属性,通过call继承,我就拥有了你的方法和属性,可以进行相关的操作了。
在JavaScript中,如果想要改变当前函数调用的上下文对象的时候,我们都会联想到call、apply和bind。比如下面? call,apply和bind的区别 在说区别之前,先简单的说下三者的共同之处吧: 都是用来改变函数的this对象的指向 第一个参数都是this要指向的对象 都可以利用后续参数进行传参 下面说下区别: 调用后是否立执行 call和apply在函数调用它们之后,会立即执行这个函数;而函数调用bind之后,会返回调用函数的引用,如果要执行的话,需要执行返回的函数引用。 ,虽然和call传参相同,但是bind被调用后返回的是调用函数的指针。 在使用的方面还是得按照需求来使用call和apply,毕竟技术都在更新。
2015-07-12 15:02:21 一、方法的定义 call方法: 语法:call(thisObj,Object) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 apply方法: 语法:apply(thisObj,[argArray]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。 相同点:两个方法产生的作用是完全一样的 不同点:方法传递的参数不同 其实说明白一点,其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。
an array (or an array-like object). apply() 方法调用一个函数,指定该函数的 this 值并将一个数组(或类数组对象)作为该函数的参数。 call call() 与 apply() 类似,区别在于 apply() 的第二个参数为数组,而 call() 把参数跟在第一个参数后面,并且可以跟多个参数。 总结 apply() call() bind() 三者区别不大,都是用来改变函数的 this 指向。 apply() 把 this 所需参数放入一个数组,作为 apply() 的第二个参数传入。 call() 和 bind() 则把参数按顺序依次传入。 bind() 返回对应函数,便于稍后调用,而 apply()、call()则立即调用 由于其特性,使用起来千奇百怪,有各种各样有趣的用法,还等待我们去挖掘。
云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。 腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。
扫码关注云+社区
领取腾讯云代金券