展开

关键词

call和apply

首先个人感觉call和apply还是挺神奇的,简简单单就改变了this的作用域,下面我们来共同学习一下1.call和apply的语法(改变this的作用域,有点像冒充的感觉,例子如下)function.apply 吐泡泡); var person=new Object(); People.call(person ,啄木鸟,捉虫子); people1.paly(); person.paly() 代码基本没变,就是把apply 替换成了call,作用相同,两者最大区别就是传递参数的方式不同,通俗说call传递参数是直接用双引号,然后一个接着一个传递apply传递参数是通过一个数组的形式传递

21430

JavaScript:prototype&apply&call

五、call和apply方法call与apply的第一个参数都是需要调用的函数对象,在函数体内这个参数就是this的值,剩余的参数是需要传递给函数的值,call与apply的不同就是call传的值可以是任意的 ,而apply传的剩余值必须为数组。

18121
  • 广告
    关闭

    90+款云产品免费体验

    提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

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

    apply()、call()、bind()

    apply()、call()、bind()每个Function对象都存在apply()、call()、bind()方法,其作用都是可以在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域 使用apply()、call()、bind()都能改变函数对象的this指向window.name = A; 挂载到window对象的namedocument.name = B; 挂载到document 绑定window对象rollCall.sayName.bind(document)(); B 绑定document对象rollCall.sayName.bind(s)(); C 绑定自定义对象区别虽然apply ()、call()、bind()都能够达到改变this指针的目的,但是其使用还是有区别的 apply与call传参方式不同window.name = Teacher;var rollCall = { sayAllName : function(...args){ console.log(this.name); args.forEach((v) => console.log(v)); }} apply 将参数作为一个数组传递

    11720

    call、apply、bind

    今天分享自己对于call、apply、bind新的认识,并手写一个自己的call、apply、bind。 fn.call(thisArg, arg1, arg2, ...)fn.apply(thisArg, )fn.bind(thisArg, arg1, arg2, ...)call和bind的参数一样,apply 的参数是一个数组(a开头,Array),call和apply返回的是fn执行的结果,bind返回的是fn的拷贝并指定this值和参数(bind不执行,需要调用)。 布尔值,this指向原始值的对象:function fn() { console.log(this);String||Number||Boolean}fn.call( || 5 || true)call、apply

    15520

    R|apply,tapply

    apply族功能强大,实用,可以代替很多循环语句,先简单介绍apply和tapply函数。一、apply()函数apply函数可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上。 使用格式如下:apply(x, MARGIN, FUN, ...)其中x为数据对象,MARGIN是维度的下标,FUN是由你指定的函数,而...则包括了任何想传递给FUN的参数。

    15380

    Kotlin —  apply vs with

    apply和with的不同① apply接收一个实例作为接收者,同时要求一个实例作为参数传递。 ② apply返回接收者,with返回其块内最后一个表达式的结果。 通常情况下,当你需要对一个对象某些事情并返回时,可以使用apply。而当你需要在一个对象上执行一些操作并返回一些可以使用的其他对象时,你可以使用with。 apply示例代码:fun getUser():User{ return User().apply{ name=andorid coder age=25 }}with示例代码:fun getPersonFromUser

    18030

    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会指向默认的宿主对象 一个4进去了Array.prototype.push 页可以实现两个数组合并同样push方法没有提供push一个数组,但是它提供了push(param1,param,…paramN) 所以同样也可以通过apply

    30020

    scala apply解析

    (name: String, age: Int): User = new User(name, age) def apply(name: String): User = new User(name, 18 根据维基百科的解释:apply是一个将函数应用于参数的函数。听上去有点绕口。scala设计的apply方法也是桥接OOP和FP编程。通用的将,任意的一个函数,都是一个将其应用到参数的过程。 所以我们可以如下写 f.apply(3) image.png 为何调用伴生对象的时候直接调用的是apply方法? 你是否有这个疑问。 万物皆对象 在scala中,所有的东西都是对象,函数也不例外。 回头看apply 严格来讲所有函数都应该遵循apply的方式,我们前面定义的f函数 f.apply(3) 这样写起来很累,所以scala的编译器帮助我们简化了这个过程,只需要我们写f(3)它就等价于上面的写法 至此我相信大家理解了这个apply的原理和逻辑了。 在伴生对象当中定义工厂方法的时候只有命名为apply的时候才能省略,其它方法名都是不可省略名称的。

    29850

    python apply()函数

    >>> help(apply)Help on built-in function apply in module __builtin__:apply(...) apply(object]) -> value apply()的返回值就是object()的返回值。 apply()的元素参数是有序的,元素的顺序必须和object()形式参数的顺序一致。 say()apply(say) 结果: hello python! hello python! 2》函数只带元组的参数 def say(a): print a say(hello python!) apply(say,(hello python!,)) def say_again(a,b): print a,b say_again(hello,python!) apply(say_again,(hello,python!)) 结果: hello python! hello python! hello python! hello python!

    1K10

    SharedPreference 的commit和apply

    commit和apply两个方法总所周知Android提供了这两个方法来写入数据,一般来说写入数据的步骤是这样的SharedPreferences pref = mContext.getSharedPreferences gson.toJson(info);editor.putString(Const.PREFER_NAME, json);editor.apply();editor.commit();这里先给结论,· apply 的写磁盘是异步行为· commit的写磁盘是同步行为· 两者在写磁盘前都会先同步的写到内存缓存中apply 流程首先要理解 SharedPreference有一个两级缓存系统,包括了内存缓存和磁盘缓存。 下面是调用 apply的简化后的源码public void apply() { final MemoryCommitResult mcr = commitToMemory(); final Runnable

    45610

    call,apply,bind详解

    我们知道bind,call,apply的作用都是用来改变this指向的,那为什么要改变this指向呢? apply方法apply接受两个参数,第一个参数是this的指向,第二个参数是函数接受的参数,以数组的形式传入,且当第一个参数为null、undefined的时候,默认指向window(在浏览器中),使用 apply方法改变this指向后原函数会立即执行,且此方法只是临时改变thi指向一次。 三者都可以传参,但是apply是数组,而call是参数列表,且apply和call是一次性传入参数,而bind可以分为多次传入。 bind 是返回绑定this之后的函数,便于稍后调用;apply 、call 则是立即执行 。

    20410

    bind、call、apply 区别

    call 和 apply 都是为了解决改变 this 的指向。作用都是相同的,只是传参的方式不同。 除了第一个参数外,call 可以接收一个参数列表,apply 只接受一个参数数组。 24) => a.fn(yck, 24) var result = context.fn(...args) 删除 fn delete context.fn return result}如何实现一个 apply

    24520

    pandas的apply操作

    pandas的apply操作类似于Scala的udf一样方便,假设存在如下dataframe: id_part pred pred_class v_id0 d cat,dog d11 5 other_label

    32830

    手写apply、call、bind

    各位宝宝,马上就要过中国年了,已经开启了放假模式了吗?放假了就好好的休息哈,该玩的时候玩、该学的时候学,就对了~

    17730

    kubectl命令之kubectl apply

    kubectl apply通过文件名或控制台输入,对资源进行配置。摘要通过文件名或控制台输入,对资源进行配置。接受JSON和YAML格式的描述文件。 kubectl apply -f FILENAME示例# 将pod.json中的配置应用到pod$ kubectl apply -f .pod.json # 将控制台输入的JSON配置应用到Pod$ cat pod.json | kubectl apply -f -选项 -f, --filename=: 如果为true,在发送到服务端前先使用schema来验证输入。

    2.7K30

    as3:Function以及call,apply

    再来看看另外Function类的重要方法call()与apply()我们知道,每个function最终在执行时,都要有一个上下文环境,也就是this指针在函数执行时,到底指向谁的问题? 但是我们可以借助Function类的apply以及call方法,显式改变this指针的指向! mike身上,即jimmy.addSalary.call(mike,1000),最终mike得偿所愿,在原工资5000的基础上加了1000,就成了工资6000 (如果现实中加工资也这么容易就好了)至于apply 方法,作用跟call一样,也可以用来改变函数执行时,this指针的指向,区别在于apply方法要求第二个参数必须是数组形式,即:jimmy.addSalary.apply(mike,);

    32290

    (2) - apply, update 语法糖

    在 Scala 中,如果我们要频繁调用某个 class 或 object 的方法,我们可以通过定义 apply 方法来避免每次写出该函数的调用,而使用一种更加简洁的方式,来看下面的例子:不使用 apply 方法scala> class truck { | def apply( goods: Int ): Unit = { | println( truck transport + goods + t goods 当然,apply 方法支持任意类型和任意个参数。另一种 apply 常用的使用场景是用 object 来创建其伴生类的实例。 )} object truck { def apply(): Unit = { new truck }} object TT { def main (args: Array) { val t = truck apply 方法在我们平时写代码时也经常碰到,比如:val l = List(1,2,3)中的 List(1,2,3) 调用就是调用的 object List 的 apply 方法?

    14520

    call和apply的实现!

    apply的具体实现Function.prototype.apply = function(context, arr) { var context = Object(context) || window

    21320

    【THE LAST TIME】this:call、apply、bind

    这就是被包了在很多书中,call、apply、bind 被称之为 this 的强绑定。说白了,谁出力,我跟谁。那至于这三者的区别和实现以及原理呢,咱们下文说! 箭头函数会永久地捕获 this值,阻止 apply或 call后续更改它。 和 bind,在 MDN 中定义的 apply 如下:apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数语法:fun.apply(thisArg 如上概念 apply 类似.区别就是 apply 和 call 传入的第二个参数类型不同。 这也是 call 和 apply 之间,很重要的一个区别。记忆技巧:apply,a 开头,array,所以第二参数需要传递数据。请问!什么是类数组?核心理念借!对,就是借。举个栗子!

    18230

    bind、call、apply的实现

    bind、call、apply是JavaScript中Function.prototype非常重要的三个方法,他们的作用是改变this的指向。 apply直接调用函数,也可以传递参数使用数组传递给第二个参数。 我们现在详细解读一下各个函数的实现方式。bind的实现bind的基本用法:函数调用bind,返回一个新的函数。 所以就不能用了 var result = eval(context.fn( + args +)); 删除添加的方法(毁尸灭迹) delete context.fn; return result;}apply 的实现apply的基本用法:函数调用apply,函数会执行,并且this指向了第一个函数。 apply方法的第一个参数是null或者undefined的时候this会绑定在全局对象上。apply方法第二个参数是一个数组,相当于函数执行时的参数。

    18562

    扫码关注云+社区

    领取腾讯云代金券