展开

关键词

callapply

首先个人感觉callapply还是挺神奇的,简简单单就改变了this的域,下面我们来共同学习一下 1.callapply的语法(改变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传递参数是通过一个数组的形式传递

23830

js 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

35020
  • 广告
    关闭

    腾讯云618采购季来袭!

    一键领取预热专享618元代金券,2核2G云服务器爆品秒杀低至18元!云产品首单低0.8折起,企业用户购买域名1元起…

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

    javascript当中call()apply()

    13)call()apply() call是在特定的域中调函数。 name; } A.prototype.info = function() { /*如果下局解开屏蔽,最后结果则打印出就为A,结论就是在call 时,先在A里找this.name,如果找不着,则b环境里找,现在A的构造函数从来没有执行过,所以最后的是B环境的name,见下一个例子*/ //this.name="

    26720

    JavaScript中的 Call Apply

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

    14910

    callapply的实现!

    apply的具体实现 Function.prototype.apply = function(context, arr) { var context = Object(context) || window } result = eval('context.fn(' + args + ')') } delete context.fn return result } 复制代码 call

    23020

    js中的callapply

    一、callapply简介 call() apply() 是预定义的函数方法。 两个方法可于调函数,两个方法的第一个参数必须是对象本身。 两个方法都使了对象本身为第一个参数。 两者的区别在于第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而callcall的参数传入(从第二个参数开始)。 二、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

    8130

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

    1. call() 语法: fun.call(thisArg,arg1,arg2,…) fun: 表示一个函数 thisArg: this要指向的对象,如果是null undefined,则指向window 参数,那么 Window对象被 thisArg; 将arg1等参数传递进fun函数中,返回fun函数的返回值。 thisArg 参数,那么 Window对象被 thisArg; 将数组传递进fun函数中,返回fun函数的返回值。 ()、apply()bind()的应 1. call() call来继承,因为ES6之前没有extends,构造函数来模拟继承。 () apply于与数组有关的操,因为传递的参数是数组。

    5130

    callapplybind的区别

    callapplybind这三个方法经常使,但是具体有什么区别呢? 首先这三个方法的法比较相似,但是,bind前两者则完全不同。 callapply是调函数,bind却是返回一个新的函数。 下面看一下MDN对三者的解释: call() 方法调一个函数, 其具有一个指定的this值分别地提供的参数(参数的列表)。 apply() 方法调一个函数, 其具有一个指定的this值,以及为一个数组(或类似数组的对象)提供的参数。 下面总结了callapply的一些常的地方。 callapply的相同点不同点说完了,下面看一看bind的法,前面一直重申函数调bind后返回一个新的函数。并不像callapply,直接调函数。

    40520

    模拟实现 call apply

    模拟实现 call apply 本文参考:深度解析 call apply 原理、使场景及实现 基础 首先来认识一下 call apply,它们都是 Function.prototype 都是来显示绑定函数内部的上下文 this 的指向,区别仅在于两者对参数的处理不同,一个接收参数列表,一个接收参数数组。 要想模拟实现 call,必须得先掌握几个关键点: call 接收的参数形式含义,及 thisArg 对 null,undefined,基本类型的特殊处理 call 本质上是函数的另一种调,只是修改了函数内的 ,this 会绑定到该对象上) 显示绑定(call, apply, bind, Reflect.apply) new 绑定(当函数 new 使时会被当做构造函数,构造函数内部的 this 会绑定到内部新创的对象上 其中,隐式绑定显示绑定属于后者,而我们想要模拟实现 call,自然就不能再使显示绑定了,那只剩下从隐式绑定方案去解决了。

    19720

    JavaScript之apply()call()的区别

    我 在一开始看到javascript的函数applycall时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法call的一些示 例,总算是看的有点眉目了,在这里我做如下笔记,希望大家分享 applycall的区别在哪里 2.        什么情况下apply,什么情况下call 3.         apply的其他巧妙法(一般在什么情况下可以使apply) 我首先从网上查到关于applycall的定义,然后示例来解释这两个方法的意思如何去.          )          call:apply的意思一样,只不过是参数列表不一样.   什么情况下apply,什么情况下call 在给对象参数的情况下,如果参数的形式是数组的时候,比如apply示例里面传递了参数arguments,这个参数是数组类型,并且在调 Person的时候参数的列表是对应一致的

    33370

    JS中的call()apply()方法

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

    65030

    js中callapply的区别

    函数时, callapply传递参数的方式不同 以名为showHide的函数为例: function showHide(name1, name2){ if(this.parentNode.parentNode.querySelector 可以按照顺序传递showHide.call(this, '桐人', '亚丝娜') apply则是将参数放到一个数组, 统一传递showHide.apply(this, ['上条', '御坂']) callapply实现相同的折叠的Demo ? 掌握了十万三千本究极魔法书的少女与拥有抹杀一切奇迹的神上之手的少年,将面临一系列故事……

    </body> </html> 小结: 使call apply函数时, 往往需要传递一个this, 目的是确定被调函数showHide运行时函数内部this的指向, 以上面的demo为例, 如果调函数showHide时, 第一个参数没有传递this

    20930

    Js apply() call()使详解

    Js apply方法详解 我在一开始看到javascript的函数applycall时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法call的一些示例,总算是看的有点眉目了,在这里我做如下笔记 主要我是要解决一下几个问题: applycall的区别在哪里 什么情况下apply,什么情况下call apply的其他巧妙法(一般在什么情况下可以使apply) 我首先从网上查到关于apply call的定义,然后示例来解释这两个方法的意思如何去. ) call:apply的意思一样,只不过是参数列表不一样. : Person.call(this,name,age); 这样就ok了 3.什么情况下apply,什么情况下call 在给对象参数的情况下,如果参数的形式是数组的时候,比如apply示例里面传递了参数

    59160

    js中callapply

    前天去面试,有个gg问了一些js知识,其中有一道callapply法的题目,尽管在365天前call方法,但当时还是没能答上来,今天深入总结一下 callapply,它们的都是将函数绑定到另外一个对象上去运行 两者的格式参数定义: call( thisArg [,arg1,arg2,… ] );       // 参数列表,arg1,arg2,... apply(thisArg [,argArray] );                 // 参数数组,argArray 上面两个函数内部的this指针,都会被赋值为thisArg,这可实现将函数为另外一个对象的方法运行的目的 一、call 的简单法 调call方法,this默认指向第一个参数input text控件,即id=‘idTxt’的控件,因此this.value为input控件的value值input text 5、函数func2调call func2 二、call 继承法与改进 js使call模拟继承 测试代码: <!

    44210

    call() apply() 的相关介绍场景

    返回值 call() apply() 返回函数应该返回的值,bind() 返回一个经过硬绑定的新函数。 () bind() 的第二个参数都是参数列表,而 apply() 则是参数数组(或者类数组)—— 尽管如此,在这些参数传递给调函数时,仍然是以参数列表的形式传递的(这一点很重要)。 执行 call() apply() 一经调则立即执行函数,而 bind() 则只是完成了函数的 this 绑定。 应场景 在这篇文章说过,call(),apply() bind() 都可以改变 this 的指向,什么时候需要改变 this 的指向呢? 对于 Son 而言,其内部的 this 将指向稍后实例化的对象,利这一点,我们在 Son 的内部通过 call() 或者 apply() 调 Parent,同时传参 this,这样就可以增强子类实例

    50320

    区别详解:js中call()apply()的

    1、关于call()apply()的疑点: applycall的区别在哪里 什么情况下apply,什么情况下call apply的其他巧妙法(一般在什么情况下可以使apply) 2、语法参数分析 : applycall都能继承另外一个对象的方法属性; Function.apply(obj,args)方法能接收两个参数 obj:这个对象将代替Function类里this对象 args:这个是数组 ,它将为参数传给Function(args-->arguments) call:apply的意思一样,只不过是参数列表不一样. call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被 thisObj。 分析:即我没有的方法或属性,通过call继承,我就拥有了你的方法属性,可以进行相关的操了。

    10620

    JavaScript之call()apply()方法详解

    简介:apply()call()都是属于Function.prototype的一个方法属性,它是JavaScript引擎内在实现的方法,因为属于Function.prototype,所以每个Function 实例,也就是每个方法都能使applycall方法。 call apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。 (需要理解JavaScript的执行环境域的概念) 介绍完这两个方法后,说下它们的异同点: 相同点:这两个方法都是劫持另外一个对象的方法,继承另外一个对象的属性. 怎样理解这句话呢? 不同点:apply()call()方法的区别就是在劫持对象后传递的参数类型不同,apply可以传递一个数组,而call只能一个参数一个参数传 例子五:个人觉得是网上理解call方法比较好的一种解释,也是比较好记的一种解释

    34760

    谈谈JavaScript中的callapplybind

    在JavaScript中,如果想要改变当前函数调的上下文对象的时候,我们都会联想到callapplybind。比如下面? 调后是否立执行 callapply在函数调它们之后,会立即执行这个函数;而函数调bind之后,会返回调函数的引,如果要执行的话,需要执行返回的函数引。 ,虽然call传参相同,但是bind被调后返回的是调函数的指针。 callapply哪个好? 据调查--callapply的性能对比,在分不同传参的情况下,call的性能是优于apply的。不过在现代的高版本浏览器上面,两者的差异并不大。 在使的方面还是得按照需求来使callapply,毕竟技术都在更新。

    16440

    相关产品

    • 云服务器

      云服务器

      云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。 腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券